Kohana 与 CodeIgniter 有何不同? [关闭]
Posted
技术标签:
【中文标题】Kohana 与 CodeIgniter 有何不同? [关闭]【英文标题】:How is Kohana different from CodeIgniter? [closed] 【发布时间】:2011-08-07 06:43:32 【问题描述】:我已经使用 CodeIgniter 很长时间了,但是最近我感觉需要转向更高级/更 OOP 的框架。 Kohana 似乎是一个经常被推荐的选项,我的问题是,Kohana 与 CodeIgniter 到底有什么不同?一个差异列表,尤其是语法差异,会很棒。
【问题讨论】:
我也有同感。 CI 很好,但到最后你自己完成了 90% 的工作。在扩展和超载的 CI 课程中,我的腋窝很厉害。我考虑过 Kohana,但它似乎是一个移动的目标:总是在新版本中进行一些重大的非向后兼容更改。我还没有花几个小时以上的时间。我知道 Kohana 使用Kohana::class
语法,而不是 CI 的 $this->class
相关,但似乎没有引起太多关注:http://***.com/questions/5559549/kohana-vs-codeigniter-year-2011
您可能还对 Fuel php fuelphp.com 感兴趣,部分由 CI 开发人员制作
其实如果你是框架购物者,我听说过关于Symfony 的好消息。我没有尝试过 Fuelphp,但我知道它的开发人员非常积极。根据我所见,它似乎与 Kohana 非常相似,但请记住它只是 php5.3。 (自我注意:不要把它变成框架摘要,尊重 OPs 问题) :)
Madmartigan:“在扩展和超载的 CI 课程中,我能应付自如”听起来你可以向 CodeInigter Reactor 提出一些很棒的拉取请求,这将使每个人的生活都变得更好。至于“但请记住,它只是 php5.3”,这并不是什么大问题,因为 PHP/Zend 不再支持 PHP 5.2.x。是时候继续前进了。
【参考方案1】:
我将写一篇关于 Kohana 3.1 和迄今为止我看到的相对于 CodeIgniter 2 的主要优势的文章。在 Kohana 3.0 之前(一年半前),我使用了 CodeIgniter、ZF、Symfony、Cake 并尝试了许多其他方法(目前尝试做 Yii 只是因为我必须这样做)。我知道很多人会因为“主观”而对我吐口水。来吧。
严格的 PHP 5.2
Kohana 在当前版本中不使用任何旧代码(即 2.x 或 CodeIgniter 的)。它被完全重写为完全面向对象而不是妨碍开发人员的方式。简而言之,使用它进行开发感觉很自然,就像它是 PHP 开发的“方式”一样。
这是一个“由社区、为社区”构建的框架,并非用于宣传目的。不是由/为任何社区,而是一个非常利特的社区。p>
CodeIgniter 在 PHP4 上停留太久了。查看 CI2 的源代码,我不能说他们已经完全转向 PHP5(假设 PHP 5.1 并不是真正的…… PHP 5)。我见过 FuelPHP,它似乎更像是 CI2 与 Kohana 的混搭,而不是 CI2 分支,但我不得不说它绝对有潜力。
HMVC
Kohana 感觉自然的主要原因就是源于这种模式。这个想法是隔离每个请求以尊重该模式,并最终尊重 RFC 2616。现在,每个请求都有一个单独的 Response 对象,能够以非常简洁的方式重用您的代码。现在我正在开发一个与 iPhone、android 和网络应用程序一起使用的网络服务。我无法描述“在内部”调用 API 的特权。原始示例:
public function action_delete()
$deleted = Request::factory('api/route')
->method(Request::DELETE)
->headers('Accept', 'text/html')
->execute();
$this->response->body($deleted);
没有障碍
Kohana 背后的团队致力于使框架“做到最好”,而不是“尽其所能,因为我们......有太多空闲时间”。每个维护版本都向后兼容以前的版本(例如 3.1.2 和 3.1.0),所有“主要”更改都等待次要版本(例如 3.1 不完全向后兼容 3.0“开箱即用”)。以前的次要版本在新版本发布后保留 6 个月。
扩展(ding|sions)
Kohana 的Cascading File System 可以非常轻松地扩展现有组件,甚至是供应商使用的组件。您可以覆盖应用程序/模块级别的所有内容,而无需考虑在任何地方手动设置包含/加载路径(因为所有文件和文件夹都遵循相同的约定)。
有一个whole bunch of modules,包括 Zend Framework。怎么样?简而言之,您甚至可以将 ZF 或任何其他库用作 Kohana 应用程序中的模块。
除了所有社区构建的模块外,每个 Kohana 安装都包含一些几乎每个应用程序都可以从中受益的模块:
授权 一个简单但非常强大的身份验证库。模块本身只提供文件验证驱动,但启用 ORM 为我们提供了更强大的驱动。
缓存 具有最流行缓存技术驱动程序的缓存库:APC、eAccelerator、文件、memcache、SQLite、Wincache 和 Xcache。它非常容易实现和更改(即使缓存驱动程序的后期更改也是单行的)。
代码台 如果您需要对某些代码进行基准测试,Codebench 为您提供了一种非常简单的方法。
数据库 与 Kohana 中的所有其他内容一样,数据库模块也是完全面向对象且可扩展的。提供完整的 mysql 和 PDO 支持。
图片 一个简单的图像处理模块
ORM 基于 ActiveRecord 模式的默认 ORM,充分利用了 Database 模块结合 PHP 5 魔术方法的优点。除此之外,您还可以使用 Jelly、Sprig、AutoModeler 或任何其他自定义 PHP 库,如 Doctrine。
单元测试 Kohana 预装了一个很棒的单元测试模块。它基于 PHPUnit 并与您的应用程序完全“集成”,让您非常简单的 TDD。此外,整个框架都经过单元测试。
用户指南 尽管大多数开发人员都忽略了这个模块,但该模块是 Kohanas 最强大的功能之一。它提供了最简单的方法来跟踪您的 API 和 Kohana 文档的其余部分。为什么您的应用程序也没有自己的指南?你甚至不必考虑它!只要您跟踪代码中的 cmets / 约定,这个模块就会处理其余的事情。
代码示例
代码比 CI 更简洁,所有类都自动加载,但约定非常相似。
更新示例(使用 ORM):
public function action_update($post_id)
$post = ORM::factory('post', $post_id);
$errors = array();
if ($values = $this->request->post())
try
$post->values($values)->update();
$this->request->redirect('post');
catch (ORM_Validation_Exception $e)
$errors += $e->errors();
$this->template->content = View::factory('post/update', array(
'post' => $post,
'errors'=> $errors,
));
在这个例子中,ORM 用于更新一行,让 update() 调用它的 check() 方法来验证它的值。如果验证失败,将捕获 ORM_Validation_Exception 并且不执行 try 块的其余部分(即重定向到 /post)。最后,post 对象 (Model_Post) 和 errors 数组都被传递到 View 中,可以直接访问它们。
请注意,所有 Database_Query_Builder 方法都可以在 ORM 中使用,因此您还可以做一些“花哨”的事情,例如:
ORM::factory('post')
->where('user_id','=',$user_id)
->join('users','INNER')
->on('users.id','=','posts.user_id')
->find_all();
或(有关系):
$user = ORM::factory('user', $id);
foreach ($user->posts->find_all() as $post)
foreach ($post->quotes->find_all() as $quote)
if ($quote->illegal())
$quote->delete();
其中非法()可以是一些带有花哨连接和东西的自定义模型级方法。我知道这个块看起来是多么的低效,它只是一个代码示例,而不是“连接比附加查询更好”:)
【讨论】:
整体+1。我不熟悉 Kohana,发现这非常有用。只是一个简短的说明,通常版本是major.minor.maintenance。您似乎指的是维护版本向后兼容,并且不保证次要版本。例如,主要版本更改是从 2.3 到 3。 @coreyward:谢谢,我将次要的称为“主要”,将维护的称为“次要”,因为大多数社区都是这样称呼它们的。无论如何,这是我所说的第二个“主要主要版本”:) 很好的答案:)。有点担心每个主要版本都会破坏以前的版本。您能否详细说明控制器、模型、视图与 CI 的工作方式有何不同,以及表单验证和数据库访问/查询是如何完成的?跨度> @Click Upvote:我用一些小代码示例更新了帖子【参考方案2】:请查看https://***.com/questions/717836/kohana-or-codeigniter,其中的链接 - http://onwired.com/blog/exploring-kohana-as-an-alternative-to-codeigniter/ - 回答了我同样的大部分问题。
【讨论】:
这可能不是有点过时了吗?自 08 年 9 月以来,CI 和 Kohana 都发布了主要版本。很高兴听到一些更新鲜和相关的反馈。例如,两篇文章都提到了 Kohana 是 php5 的区别,而实际上它们现在都是 php 5。Now at version 2.2, Kohana is ready to enter the ring and compete for our attention
... Kohana 现在是 3.12 版 :(
刚刚概述了几年前我有兴趣切换时的一些差异,但由于我仍然对 Codeigniter 感到满意,所以我真的不能提供比我当初找到的链接更多的东西问同样的问题。
我同意它过时了.. 很高兴听到 Kohana 的当前用户的消息。我可能会悬赏这个问题以获得一个好的答案。
@Click Upvote:你试过安装 Kohana 了吗?
@Mad不,我想在安装之前看看我是否要使用它。以上是关于Kohana 与 CodeIgniter 有何不同? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章