gpt4 book ai didi

php - Kohana 与 CodeIgniter 有何不同?

转载 作者:IT王子 更新时间:2023-10-28 23:46:59 24 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




8年前关闭。




我已经使用 CodeIgniter 很长时间了,但是最近我觉得需要转向更高级/更 OOP 的框架。 Kohana 似乎是一个经常推荐的选项,我的问题是,Kohana 与 CodeIgniter 究竟有何不同?差异列表,特别是语法差异,会很棒。

最佳答案

我将写关于 Kohana 3.1 以及到目前为止我看到的相对于 CodeIgniter 2 的主要优势。在 Kohana 3.0 之前(一年半以前),我使用过 CodeIgniter、ZF、Symfony、Cake 并尝试了很多其他的(目前尝试做 Yii 只是因为我必须这样做)。我知道很多人会因为我“主观”而吐槽我。前进。

严格的 PHP 5.2

Kohana 在当前版本中不使用任何旧代码(即 2.x 或 CodeIgniter 的)。它被完全重写以完全面向对象并且不妨碍开发人员。简而言之,使用它进行开发感觉很自然,就像它是 PHP 开发的“方式”。

这是一个“由社区,为社区”构建的框架,而不是出于宣传目的。不是由/为任何社区,而是一个非常小众的社区。

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)

小花的 Cascading File System使得扩展现有组件甚至供应商使用的组件变得非常容易。您可以覆盖应用程序/模块级别的所有内容,而无需考虑在任何地方手动设置包含/加载路径(因为所有文件和文件夹都遵循相同的约定)。

有一个 whole bunch of modules ,包括 Zend 框架。怎么样?简而言之,您甚至可以将 ZF 或任何其他库用作 Kohana 应用程序内的模块。

除了所有社区构建的模块之外,每个 Kohana 安装都包含一些几乎每个应用程序都可以从中受益的模块:
  • 授权
    一个简单但非常强大的身份验证库。该模块本身仅提供文件身份验证驱动程序,但启用 ORM 为我们提供了一个更强大的驱动程序。
  • 缓存
    带有最流行缓存技术驱动程序的缓存库:APC、eAccelerator、文件、内存缓存、SQLite、Wincache 和 Xcache。它非常容易实现和更改(即使以后缓存驱动程序的更改也是单行的)。
  • 代码台
    如果您需要对某些代码进行基准测试,Codebench 为您提供了一种非常简单的方法。
  • 数据库
    与 Kohana 中的其他所有内容一样,数据库模块也是完全面向对象和可扩展的。带有完整的 MySQL 和 PDO 支持。
  • 图片
    一个简单的图像处理模块
  • ORM
    基于ActiveRecord模式的默认ORM,充分利用Database模块结合PHP 5魔术方法的优势。除了这个,您还可以使用 Jelly、Sprig、AutoModeler 或任何其他自定义 PHP 库,如 Doctrine。
  • 单元测试
    Kohana 预装了一个很棒的单元测试模块。它基于 PHPUnit 并与您的应用程序完全“集成”,让您非常轻松地进行 TDD。此外,整个框架都经过了单元测试。
  • 用户指南
    尽管大多数开发人员都忽略了该模块,但该模块是 Kohanas 最强大的功能之一。它提供了最简单的方法来跟踪您的 API 和 Kohana 文档的其余部分。为什么您的应用程序也没有自己的指南?你甚至不必考虑它!只要您跟踪代码中的注释/约定,这个模块就会处理剩下的事情。

  • 代码示例

    代码比 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) 和错误数组都传递给 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();
    }
    }
    }

    非法()可以是一些带有花哨连接和东西的自定义模型级方法。我知道这个块看起来有多么低效,它只是一个代码示例,而不是“联接比附加查询更好”:)

    关于php - Kohana 与 CodeIgniter 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693138/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com