ホームページ >php教程 >php手册 >PHP フレームワーク CodeIgniter VS Zend の再考

PHP フレームワーク CodeIgniter VS Zend の再考

WBOY
WBOYオリジナル
2016-06-21 08:55:321106ブラウズ

我们计划从头开始一个新项目,为此评估了一些PHP框架。我们的备选列表有CakePHP , CodeIgniter , Symfony和Zend 。 我们分别使用这4种框架编写了一个相同的小应用(一个简单的Wiki应用),希望我们能尽快选定一个最合适的。

声明:我会努力确保自己的客观性,虽然我是一个ColdeIginter的爱好者。我所工作的公司是Zend的合伙人(我们已经使用了Zend Platform 和 Zend Studio)。

  尽管一开始的计划是评估4个框架,但是这篇文章实际是CodeIgniter和Zend Framework的直接比较。在花费了几个小时研究了这4个框架后,我不得不把Symfony和CakePHP从名单中排除。理由如下:

  Learning curve 学习曲线
Symfony 和 CakePHP都有一个非常陡峭的学习曲线。CakePHP有严格的规则:数据表明此、文件位置、方法名和类名。Symfony使用 .yml 格式(需要学习,虽然它不是真的很难)来存储配置信息,并且大量的操作需要通过控制台(console)完成,创建数据表、数据模型和很多其它文件都需要使用命令行。

  Strict ORM: 严格的ORM
Symfony 和 CakePHP都有一个成熟的对象关系映射器(object-relational mappers ORM) ,提供对数据的访问,但是这一特性很难被禁用,除非作出大量的努力。这些ORM有着严格的规则和约定,它们必须被遵循。与之相反,Zend Framework 和 CodeIgniter 在是否使用Models和如何使用Models上非常灵活的。使用Models是可选的,虽然它们都有数据映射器(data mappers),但没有这些应用一样可以进行(开发编写)。应用的数据操作将是极其密集和精细(intensive )的,我们不愿意受到选择的限制。

  Flexibility: 灵活性
Zend Framework和CodeIgniter比其他两个框架更灵活。

最终对比

    CodeIgniter   Zend Framework

  Set Up 初始建立

  CodeIgniter很容易初始化。 复制框架的所有文件到网络服务器,这是一个不错的开始。 它的文件夹也很小-大约2 .1兆。从开始建立,5分钟后,我就可以显示出默认主页。   Zend Framework需要麻烦一些,它需要创建一个bootstrap文件,填写所有的初始化设置。比较之下,框架有点大-大约12.4MB。整个初始建立过程用来大约19分钟。

  文档

  文档的结构和组织相当好,但是不如Zend Framework详细。CodeIgniter有论坛和Wike,有很多用户提交的代码。   Zend Framework有非常详细的文档,并且有很多示例。在我看来它的文档结构不如CodeIgniter,这可能是受到前面提到的细节和大量的可用的部件影响。ZF 也有一个Wiki,里面有少量的教程。

  模板

  CodeIgniter包括一个模板分析器类,在我看来,它的作用是有限的,因为它不支持逻辑(例如,IF语句)。不管怎么说,CI建议在模板(view)中使用PHP标签。   ZF 包含了一个布局类,用于给整个站点或者应用提供一个通用布局(或者多个布局)。它直接在模板中使用PHP标签,它也提供了一个抽象的View类,可以使用第三方模板库进行扩展。

  组件

  CI有很多库和帮助器来简化开发过程。尽管这些相比ZF还是显得少,但大体上,用法更简单(While it does have less of these than ZF, in the main, the usage of the CI variants is simpler)。   ZF有巨量的类和组件。它们有着很好的文档但使用起来要比CI的稍微复杂一些。

  数据访问

CI には、データベース接続を処理するためのデータベース クラスがあります。このクラスは、標準 SQL クエリを使用して、標準 PHP メソッドを使用して作成、取得、更新、削除を行うことができます。 CI は、Active Record Database パターンの修正バージョンである Active Record クラスも提供します。このパターンを使用すると、データの取得、挿入、更新に使用するコードを減らすことができます。場合によっては、データ操作の実行に必要なコードは 1 行または 2 行だけです。シンプルさに加えて、Active Logging の主な利点は、クエリが別のデータベース アダプタによって生成されるため、データベースに依存しないアプリケーションの作成が可能になることです。クエリのセキュリティも考慮されており、システムは自動的に変数をエスケープします。 Zend_Db とその関連クラスは、ZF 用のシンプルな SQL データベース インターフェイスを提供します。標準の SQL クエリを受け入れますが、クエリ結果を取得するプロセスが簡素化されます。これには、テーブル データ ゲートウェイと行データ ゲートウェイを使用した ORM も含まれています。データテーブルとデータ行をそれぞれオブジェクトにパッケージ化し、開発速度を大幅に向上させます。欠点は、CI で使用される変更されたアクティブ レコード パターン (広く使用されていない) と比較して、パフォーマンスがわずかに低下することです。 Zend_Db はテーブルのリレーションシップも処理できます。 (Zend_Db は PHP クラスでテーブルの関係をモデル化することもできるため、データベースの結合が簡単になります。)

柔軟性

CI は非常に柔軟で、ほとんどすべてのデフォルト設定を変更できます。 ZF は、実際には単純なクラスのコレクションです。ブートストラップ ファイルに追加されている限り、すべてのファイルとディレクトリを任意の場所に配置できます。

検証

CI でのデータ検証は検証クラスによって処理されます。一部のルールは定義され、検証オブジェクトに割り当てられ、URL またはフォームから送信されたデータを自動的に検証します。プログラマは、これらの取得をどのように処理するかを決定できます。検証クラスは、指定されたフィールドのエラー メッセージを自動的に設定するのにも役立ちます。 Zend_Validate は、一般的に使用されるバリデーターのセットを提供します。また、シンプルなバリデーター接続メカニズムも提供し、複数のバリデーターを指定された順序で単一のデータ (データ) に適用できます。 ZF では、各バリデーターは異なるクラスであり、CI のようにデータがクラスに渡されるのではなく、そのクラスがデータに追加されます (フィルターのように)。 ZF では、各バリデーターは別個のクラスであり、CodeIgniter のようにデータがクラスに渡されるのではなく、そのクラスが (フィルターのように) データに追加されます。

フォーム

CI のフォーム ヘルパー ファイルには、フォームの操作を支援するいくつかの関数が含まれています。その機能はフォームフィールドを生成することですが、それでも HTML を記述することは避けられません。 Zend_Form はフォームの作成と処理を簡素化します。要素のフィルタリング、検証、データのエスケープ、フォームのレンダリングを処理します。 Zend_Form を使用すると、ZF は PHP を使用して、ラベル、検証、エラー メッセージを含むフォームを完全にラップできます。

パフォーマンス

CI は ZF の約 2 倍のパフォーマンスを持っています ZF は CI よりも約半分遅い

テスト

CI には単体テスト クラスがありますが、テスト コードと実際のコードの混合を奨励するため、お勧めしません。単純なテストにはサードパーティの拡張機能を使用する場合があります。ただし、SimpleTest 用のサードパーティ拡張機能も利用できます。 PHPUnit を CI クラスで使用することもできます。 ZF には組み込みのテスト クラスがありませんが、そのコア クラスはテスト フレームワークとして PHPUnit を使用し、追加のクラスを含めるように拡張できます。 ZF で SimpleTest を使用することもできます。

国際化

いいえ はい

承認

BSD スタイル 新しい BSD



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。