2016-12-13 11 views
2

したがって、私はこのクラスを自分のアプリ全体で何度も繰り返し使用しています。これは一例であり、ではない実際に行われるように必要なもの:多くのオーバーヘッドパフォーマンスに影響を与えずにアプリケーション全体でPHPクラスを使用する方法

ファイルA:

class Names { 

    public function first() { 
    echo 'Bob'; 
    } 

} 

そのファイルがspl_autoload_registerを使用して、私のアプリに自動的にロードされ、他のページ/クラスで全体のすべての使用:

ファイルB:

class LastNames { 

    public function __construct() { 
    $this->first = new Names(); 
    } 

    public function last() { 
    echo $this->first->first().' Smith'; 
    } 

} 

$names = new LastNames(); 

echo $names->last(); // Bob Smith 

私は、コンストラクタ内のクラスをインスタンス化Names多くのファイルを持っています。

  • これは、パフォーマンスに大きな打撃を与えますか?
  • public functionの代わりにstatic functionを使用する必要がありますか?
  • Names内の関数を別のクラスの中で何度も何度も再利用する方がいいですか?
+1

は「多くの」再パフォーマンスを定義します。あなたは、各クラスオブジェクトに固有のクラスメソッド(関数)のモジュラインスタンスではなく、単一のインスタンスが必要な場合にのみ静的(私が知っている限り)する必要があります。私はこれが典型的に抄録として参照されていると思う。 – Martin

+0

'コンストラクタの内側 'に移動し、関数内にインスタンスを作成するのではなくインスタンスを挿入します。 '__construct(Names $ names)'トピック:依存性注入 – JustOnUnderMillions

+0

オブジェクトをインスタンス化するのはコースのためです。オブジェクトがビジネスロジックに必要なものであれば、インスタンス化を避けることはできません。 「多くの」小さなオブジェクトをインスタンス化することは、通常は問題ではありません。問題は:**それはあなたのために問題ですか?**あなたはそれを試しましたか?あなたは問題を見つけましたか?現実の世界で実際に対処する必要がある問題です。それ以外の場合、コードは実行不可能でしょうか?実際にパフォーマンスの問題が発生するまで、心配する必要はありません。あなたのオブジェクトをインスタンス化する。 – deceze

答えて

0

あなたは静的関数を使用して、いくつかのオプションを持っているが、それらのいずれかです。

class LastNames { 
    public static function foo(){ 
     // do stuff 
    } 
} 

それとも、シングルトン使用することができます。

class LastNames { 
    private static $instance = null; 

    private function __construct(){ 
     // do stuff 
    } 

    public function foo(){ 
     // do stuff 
    } 

    public static function getInstance(){ 

     if (!self::$instance){ 
      self::$instance = new LastNames(); 
     } 

     return self::$instance; 

    } 

} 

をそしてあなたがそれを呼び出すことができます。

$lastnames = LastNames::getInstance(); 
$lastnames->foo(); 
+0

'constructor'は**プライベート**にする必要があります。 @ JROBここでのパフォーマンス[https://3v4l.org/Adcq6](https://3v4l.org/Adcq6) – user2976753

+0

あなたは正しいです、私は編集しました。 – Yoleth

+0

ここでは、シングルトン/静的クラスが適切な解決策であるとは思われません。クラスの動作が大きく変わるからです。 – deceze

関連する問題