1

私は現在問題に直面しています。別のクラス内でクラスを使用する必要があるコードを書いています。現在、私はこの方法で問題を解決しています:

   class foo {
        private $bar;
        function __construct() {
            $this->bar = new different_class();
        }
    }

ただし、複数のクラスを使用する必要がある場合、コードが少し長くなり、面倒になります。これを行う他の方法はありますか?

私の考えは、直接呼び出すことができるある種のグローバルクラスを作成することです:

class foo{
        function hello(){
            return "Hello";
        }
    }
class bar{
        function hi(){
            return $foo->hello();
        }
    }

それは可能ですか?どうもありがとうございました!

4

4 に答える 4

1

他の人が述べたように、3 つのオプションがあります。

  • staticクラスをインスタンス化する必要のないメソッドを使用します。
  • 2 番目のクラスを最初のクラスの子クラスにします。
  • 最初のクラス内で 2 番目のクラスをインスタンス化します。(これは、上記の最初の例で行うことです。)

あなたが与えた正確な例を使用すると、staticメソッドが機能します。ただし、staticメソッドには実際の制限があります。定数またはその他のstaticプロパティを返すためにのみ使用できます。

したがって、関連する実際のクラスの複雑さによっては、static多くの場合、実行可能なオプションではない可能性が非常に高くなります。

この場合、上記の最初の例とまったく同じことを行うのが正しいオプションです。

于 2013-01-28T21:54:31.987 に答える
1

静的メソッドまたは継承はどうですか?

静的メソッド

class foo {
   public static function hello() {
      return 'Hello';
   }
} 

class bar {
   public function hi() {
     return foo::hello();
   }
 }

継承

class foo {
    public function hello() {
       return 'Hello';
    } 
}

class bar extends foo {
   public function hi() {
     return $this->hello(); // Will return foo->hello()
   }
}
于 2013-01-28T21:39:15.147 に答える
0

static キーワードを検索します。

http://www.php.net/manual/en/language.oop5.static.php

静的クラス全体は必要ないかもしれませんが、それは設計計画次第です。

于 2013-01-28T21:38:39.063 に答える
-1

パラメータでインスタンスを渡してみませんか?

 class Foo {
    public function hello(){
       return "Hello";
    }
 } 
 class Bar{
    function hi( Foo $foo ){
       return $foo->hello();
     }
 }

または、IMHO、さらに良い方法:クラスをハードコーディングする代わりに、依存性注入を使用します。パラメータにインターフェイスを渡します。このインターフェースを実装するすべてのクラスは、パラメーターとして渡すことができます。

 interface MyInterface {
    public function hello();
 }

 class Foo implements MyInterface {
    function hello(){
       return "Hello";
    }
 } 

 class Bar{
    function hi( MyInterface $foo ){
       return $foo->hello();
     }
 }

インターフェイスを使用して質問に回答するには:

   class foo {
        private $bar;
        function __construct( AnInterface $different_class ) {
            $this->bar = different_class;
        }
    }
于 2013-03-04T00:37:26.473 に答える