ホームページ  >  記事  >  バックエンド開発  >  言語自体を無視した場合、ThinkPHP と Django の 2 つのフレームワークのうちどちらが優れており、どちらの戦略が優れているのでしょうか?

言語自体を無視した場合、ThinkPHP と Django の 2 つのフレームワークのうちどちらが優れており、どちらの戦略が優れているのでしょうか?

WBOY
WBOYオリジナル
2016-06-17 08:30:343663ブラウズ

使いやすさと拡張性の観点から分析を支援します

返信内容:

ThinkPHP が (基礎ゼロで) 簡単な仕事探しに適しているかどうかを尋ねる場合、ThinkPHP が「優れている」かどうかを尋ねるのは問題ありません。 Django と比較すると、ThinkPHP の方が優れていると考える人もいます。これは本当に言わなければなりません。技術的な観点から見ると、ThinkPHP は Django と比較する価値がありません。

ThinkPHP のコード品質は非常に平均的で、スタイルは特に悪いです - 多くの 1 文字の名前、グローバル関数、グローバル変数 (および組み合わせ - 1 文字のグローバル関数)、GET / の乱用POST 配列...想像してみてください (URL を混乱させたり圧縮したりする目的で) フォームで 1 文字のキーを使用したところ、結果は不可解な動作になりました。最終的に、これが次のいずれかであることが判明しました。フレームワークのデフォルトのグローバル GET パラメーター... 最も重要なことは、これらが依然として誇りに思う機能であるということです。フレームワークの内部はおろか、開発者に公開されている公開インターフェースもこのようなもので、「行を縮める」魔法のような手法が随所に見られ、統一されたコード仕様はなく、PHPの型変換によって引き起こされる落とし穴を避けるための注意も払われていません。 ..

安全性も特に心配です。コーディングの品質によって引き起こされる詳細な抜け穴は言うまでもなく、SQL クエリ ビルダー全体の設計は驚くべきものです。私も当初は気にしていませんでしたが、現代のフレームワーク(ThinkPHP 3.X)としては、プリペアドステートメントやパラメータ化されたクエリをうまく活用するのが基本であり、できれば型バインディングも行うべきだと感じました。 (特に動的言語において) しかし ...ThinkPHP の SQL インジェクションの脆弱性が次々と暗雲の中で暴露され (多くの詳細は今公開されているはずです。自分で検索してください)、その 1 つを修正するまでは。間接的に新たなリグレッションを引き起こしたのですが、どうしてフレームワークがそんなに簡単に注入されるのだろうかと感じました。修復されたパッチと SQL サブシステム全体を見たところ、怖くなりました。公式には「これはこうです。応答 - これは多くの場合当てはまりますが、クエリ ビルダー に値を渡すことは考えられません (また、「unsafe」などの強制的な使用はありません)関数) インジェクションにつながることは開発者がすべきこと 対処すべき問題...

回帰に関して言えば、最も重要な点について言及する必要があります - テストはどこにあるのか?とにかく、単体テストなしでこのような巨大なフレームワークを使用する勇気はありません... (Knuth の TeX にはテストがあります... 彼はプログラミングの禅の「達人」ではありません...)

議論できる問題があります - アップグレードです。 ThinkPHP 1.X から 2.X、そして 3.X にアップグレードしました。インターフェイス、動作、さらには全体の構造やモデルさえも変更されます。アップグレード ドキュメントは分厚い PDF ではないため、多くの詳細が完全にはカバーされていないことに注意してください。 Django と比較すると、比較的大きな変更があった初期の Django であっても、アップグレードはそれほど困難ではありませんでした。ほとんどの場合、非推奨のアラートはいくつかのバージョンに先立って発行されていました。Django の最近の長期的なアップグレードは言うまでもありません。比較的スムーズでしたが、これはその合理的な構造にも関係しています。もちろん、時間をかけて大きなバージョンをフォローアップするつもりであれば、この種のより破壊的なアップグレードをサポートすることもできます。そうでない場合、古いバージョンには最終的に常にセキュリティ サポートがありません。古いバージョンの数を見てください。の ThinkPHP サイトがスクリプトキディによってハッキングされました。

ThinkPHP には「利点」もあります。コメント、コミットメッセージ、ドキュメント、コミュニティなど、上から下まですべて中国語です (もちろんコードは別として)。 、その必要はなく、英語学習の大きな壁をクリアします。

私の意見では、歴史的な理由でそうせざるを得なかった場合(この場合は転職を強くお勧めしますが)、または早く専門学校に行きたい場合にのみ、この大きな落とし穴には触れないでください他の場合には。 「フレームワークの長所と短所」を議論する場合、Laravel、Symfony などと Django の比較の方が意味があります。

更新 (別名、オフトピック):
多くの人が CodeIgniter について言及していますが、これは私がこれまでに使用した最初のフレームワークでもあり、これまで読んだ中でコード率が最も高い PHP フレームワークでもあります。 。正直に言うと、CodeIgniter は設計、アーキテクチャ、さらにはコードの品質も良く、ドキュメントも非常に理解しやすいです。ただし、CodeIgniter の位置づけは ThinkPHP とはまったく異なります。最も重要な違いの 1 つは、データ層の抽象化が非常にシンプルであることです。さらに残念なのは、特に PHP 5.3 に追いつけなくなってから (新しい機能が使用されなかっただけでなく、互換性の問題もありました)、その開発が長い間停滞していることです... お勧めできません新しいプロジェクトで 2.x CodeIgniter を使用する (PHP 5.3 以降、非常に多くの重要な新機能があります)。 CodeIgniter に関しては、しばらく前にメンテナンスのためにここの大学 (BCIT) に移管され、バージョン 3.x がリリースされました。使用していない場合はコメントしません。

私がとても気に入っていたもう 1 つのフレームワークは CakePHP です。これは、標準化されたコード、完全なテスト、そして活発なデータ モデルを備えており、優れた機能を備えた数少ない PHP フレームワークの 1 つです。 ORMのジョブであり、デバッグ機能も非常に優れており、コードやデータベースの自動生成などの「スキャフォールディング」機能と相まって、Djangoに近いと言えます。残念ながら、データ モデルの私のお気に入りの部分はバージョン 2 での実装に問題がありました。修復には時間をかけてバグをチェックし、修正しようとしましたが、最終的には完全に修正するのは難しいと思いました。互換性を壊さずに修正する必要があったため、バージョン 3.x のままにしてデータ モデル システム全体を再構築しました。 3.0が出たみたいですが、まだ使ってません…

Laravelは新しすぎるし、Symfonyは重すぎるので、この2つは全く方向性が違いますが、使ったことはありません。 。 トラクターと自動車の違い...

しかし、多くの国内プロジェクトの開発環境は農地です... 以下のデータの時点は20150818です
言語自体を無視した場合、ThinkPHP と Django の 2 つのフレームワークのうちどちらが優れており、どちらの戦略が優れているのでしょうか?
言語自体を無視した場合、ThinkPHP と Django の 2 つのフレームワークのうちどちらが優れており、どちらの戦略が優れているのでしょうか?githubで検索
Django
言語自体を無視した場合、ThinkPHP と Django の 2 つのフレームワークのうちどちらが優れており、どちらの戦略が優れているのでしょうか?thinkphp 言語自体を無視した場合、ThinkPHP と Django の 2 つのフレームワークのうちどちらが優れており、どちらの戦略が優れているのでしょうか?


まったく比較可能性がありません。thinkphp は PDO をサポートしていません ( SQLインジェクションの危険性)、名前空間をサポートしていないと言われていますが、この追従速度なら文句は言えません。 laravelが浮かんでいます PHP フレームワーク、中国で最もよく使われているのは YII です 言語自体を無視して、なぜ P について話しているのですか?フレームワークの多くの機能は言語機能に基づいています。 ThinkPHP はかなり前に更新を停止しているため、ThinkPHP を使いたい人は、asp.net に切り替える必要があります。 ~

中国の多くの人は、ThinkPHP や PHPWind など、何百年も前の古いものを使用することを好みます。プロジェクト チーム用のフレームワークを選択するときは、適切なフレームワークを見つける必要があります。それ以外の場合は、GitHub が提供します。プル リクエストに誰も応答しません。とても迷惑です~

Django も非常に優れたフレームワークで、初心者に適しています。 私はTPを使用したことがありませんが、YII2でTPを使用した経験から。 。 TPは好きじゃない。
= =TP のグローバル関数 M 関数 D 関数を見ると気分が悪くなります (私はオブジェクト指向思想家です) アーノルド、PHP が最高の言語ではないですか? ただ言いたいのは、TP は非常に早く学習するということです (午前 1 時)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。