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 有何不同? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

什么是 HMVC 模式?

DND和DDM有何不同?

在Android xml中,边距开始与左侧边距有何不同,同样,边距结束与右侧边距有何不同[重复]

rancher 与 Kubernetes 有何不同

概念与接口有何不同?

Logstash 与 Kafka 有何不同