2008-09-15 6 views
9

すべての(またはほとんどの)PHPの組み込み関数をよりオブジェクト指向のクラス階層にグループ化しようとするプロジェクトが存在するかどうか不思議です。たとえば、すべての文字列関数を単一のStringクラスにグループ化するなどです。誰かがPHPのシステム関数をよりオブジェクト指向にしようとしましたか?

変更がPHPソースコードレベルで行われていない限り、実際には問題は解決されません。関数はまだグローバル名前空間でアクセス可能ですが、ユーザビリティははるかに容易になります。

答えて

4

あなたの質問に答えるために、はいそこは、あなたが話している正確に何のライブラリをいくつか存在します。あなたが使いたいものは全く異なる質問です。 PHPClassesとpear.orgはこのようなライブラリを探し始めるのに適しています。

更新: 他の人が提案してきたようにSPLが良いのライブラリで、PHPの組み込み関数の多くをラップします。しかし、それはまだラップしない多くのPHP関数があります。まだ銀の弾丸なしで私たちを離れる。

CakephpやZend(その他も)などのフレームワークを使用しているとき、私は、彼ら自身のライブラリを組み込み、フレームワークにDB接続などの基礎を構築することによって、これらの問題のいくつかを解決しようとしています。だから、フレームワークは、私は同意しない別の解決策

5

私はこれがPHPのためのintergralであると思います。主に.Netプログラマーであることから、私はPHPが苦労して100万と1つのグローバル関数で動作することがわかりました。 PHP 5.3には名前空間がありますが、独自のライブラリがオブジェクト指向でなくても、名前空間を使用するだけでは役に立ちません。私はPHPを言語としてはあまり気にしませんが、APIはひどく混乱しており、おそらく完全な見直しが必要です。 VB.NetになったときのVBのようなもの。

+1

合意に達しましたが、そのドキュメントは比類のないものです。 –

+0

私はこれをPHP 6の優先事項と見なしたいと思います。彼らは現在、今後の予定で名前空間のサポートをリリースしています。3リリースでは、次の論理的ステップは、標準ライブラリ関数を独自の名前空間/クラス階層に移動させることです。 – Wilco

+0

我々は唯一の可能性があります – SeanDowney

6

ウェイ回数が多すぎます。誰かがPHPにオブジェクト指向の機能があることを発見するとすぐに、クラス内のすべてをラップする必要があります。あなたが欲しい方方法で、建築家、あなたのソリューションをできるように、PHPでオブジェクト指向のものに

ポイントです。しかし、オブジェクトに既存の関数をラップすることは、大きな利益をもたらさない。

PHPのコアはかなりオブジェクト指向すでにされて言われていること。 SPLをご覧ください。

+0

SPLは間違いなく正しい方向の一歩です。私はグローバルネームスペースに非常に多くのコア機能を持たせるのは非常に面倒だと考えています。私は言語に組み込まれているものとの衝突を命名することを心配しなければならないということは私にはばかげているようです。 – Wilco

+0

あなた自身のコードをオブジェクト指向の方法で書くと、ほとんど心配はありません。コアのものと競合する可能性はほとんどゼロであるため。あなたがしても、それは失敗するでしょう。 私はあなたがどこから来ているかを完全に取得します。 PHPにはその味がありません。 Pythonが良い選択かもしれません。 –

4

かもしれません。オブジェクト指向プログラミングは、手続き型プログラミングより本質的に優れているわけではありません。多態的な振る舞い(継承、メソッドのオーバーライドなど)が必要な場合を除き、オブジェクト指向を使用すべきではないと私は信じています。コード用の単純なコンテナとしてオブジェクトを使用することは、オーバーヘッドに値するものではありません。これはであり、特にという文字列が本当に多く使用されているため(たとえば配列キーとして)すべてのアプリケーションは通常、いくつかのポリモフィックフィーチャを使用できますが、通常は高レベルです。 Stringクラスを拡張したいですか?

また、少し歴史はPHPの奇関数の命名を理解することが必要です。 PHPは標準CライブラリとPOSIX標準に基づいており、多くの同じ関数名(strstr、getcwd、ldap_openなど)を使用しています。これは実際には良いことです。なぜなら、言語バインディングコードの量が最小限に抑えられているため、十分に検討された一連の機能(PHPで行うことができるC言語の機能)と、これらのシステムライブラリは高度に最適化されています。 strchrは通常はインライン展開されているため、約10倍速くなります)。

+0

よく練習しました。それがオーバーヘッドの価値があるかどうかはまた、文脈にも依存します。私たちは、簡素化されたコードのために常にパフォーマンスを犠牲にします。そうでなければ、私たちはまだすべてアセンブリで開発しています。 – Wilco

関連する問題