1

この質問は一部の人には明らかかもしれませんが、私はWebアプリケーション、特にPHPを使用して多層アーキテクチャの表面をかじり始めたばかりです。私はいくつかのオブジェクトを含むライブラリを持っています、そしてそれは急速に拡大しています。私は常に再利用性の観点から考え、プロジェクトを小さく、再利用可能で、ゆるく結合されたコンポーネントに分割して、プロジェクトを作成するだけでなく、将来のプロジェクトのパーツも作成するようにしています。オブジェクトのincludeステートメント内で絶対パスの使用を停止できるように、一種のパ​​ッケージ管理システムを設計しようとしています。ライブラリ内のすべてのクラスファイルにインクルードを含む単一のファイルが必要です。インクルードとともに、「シングルトン」のクラスを追加したい ライブラリにあるすべてのオブジェクトのインスタンスをオンデマンドで取得できるようにするパターン。新しいインスタンスへの参照を返すオブジェクトごとに静的ゲッターを作成する予定です。基本的に、このようなもの...

include('classa.php');
include('classb.php');
include('classc.php');
class pacman{
     private static $instance_stack;
     public static function GetPackage($strPackage){
         if(!self::$instance_stack){
             self::$instance_stack['classa']=new ClassA();
             self::$instance_stack['classb']=new ClassB();
             self::$instance_stack['classc']=new ClassC();
         }
         if(array_key_exists(strtolower($strPackage),self::$instance_stack)){
             return self::$instance_stack[strtolower($strPackage)];
         }
         else{
             return false;
         }
     }

}

それならクラスを取得したいのなら...

include('pacman.php');
$ClassA = pacman::GetPackage('classa');

これは非常に初歩的な実装だと思います。私の例は最低限をカバーしています。私の問題はこれを実装することではありません。むしろ、インクルードからの何百ものインスタンス化されていないクラスがパフォーマンスに顕著な影響を与えるかどうかの問題です。もしそうなら、誰かが回避策を知っていますか?コンテンツごとにディレクターに分類された何百ものクラスの相対パスを追跡するのがどれほど難しいかはわかりません。

4

2 に答える 2

2

それらを自動ロードしてみてください。

<?php
function __autoload($class_name) {
    include $class_name . '.php';
}

$obj  = new ClassA();
$obj2 = new ClassB(); 
?>

これにより、クラスが「オンデマンド」で読み込まれ、オーバーヘッドが削減され、すべてのファイルを事前に含める必要があります。詳細はこちら: http: //php.net/autoload

于 2012-09-28T19:39:02.200 に答える
0

パフォーマンスに関する質問への答えは、問題ではありません。Facebook2、Yahoo2、またはGoogl2を使用するまで、違いに気付くことはありません。

個人的には、シングルトーンを多用することをお勧めしません。いい名前のGLOBALです。長期的にコードを操作するのが難しくなります。

再利用可能なパッケージ/ライブラリに興味がある場合は、Pharについて学んでください。

どこでも静的ゲッターが必要な場合は、traitsと呼ばれる最新の5.4.x機能を確認してください。コードの繰り返しを避けるのに役立ちます。

最後に、クラスにrequireを使用しないでください。autoloadを使用します。

于 2012-09-28T19:38:26.653 に答える