1

だから私はconfig.phpファイルを持っています。これはサイトのすべてのページの上部のタグの前に含まれています。このファイルは__autoload()を使用して、使用するすべてのphpクラスを取得します。次に、それらを自動ロードした後、クラスを次のような変数に割り当てます...

$myclass = new Myclass();
$mysecondclass = new MySecondClass();

$myclassで$mysecondclassを呼び出したい場合、未定義の変数エラーが発生します。もちろん、これは$mysecondclassが$myclassの前に定義されていないためです。他のクラスのすべてのクラスを定義できる場合、これを修正するにはどうすればよいですか?

助けてくれてありがとう:)

4

4 に答える 4

4

最良のOOPアプローチは、他のクラスのオブジェクトであるプロパティを持つsuperObjectを使用することです。

class Context{
  var $myClass;

  var $myOtherClass;

  var $db;

  //...
}

あなたの中でMyClass

class MyClass{

  var $context;

  public function __construct(&context){
    $this->context = $context;
  }

  public function otherFunction(){
    $this->context->myOtherClass->functionFromOtherClass();
  }
}

これらのクラスは、ファクトリメソッドまたはオブジェクトを管理するためのメカニズムを使用してインスタンス化する必要があります。

初期化MyClassするには、次のようなものを実装します。

ObjectFactory::createObject('MyClass',$context);
于 2012-05-29T02:41:48.663 に答える
0

$myclass(オブジェクト)Myclassのインスタンスではありません。Myclassオブジェクトはクラスではありません。MySecondClassのインスタンス内の新しいインスタンスを使用する場合はMyclass、そこでインスタンス化するだけです。

あなたの質問はスコープも扱っています。これらの2つのオブジェクトをグローバルスコープで作成しました。それらは相互に自動的にアクセスできません。インスタンスが1つだけで、グローバルで他のユーザーがアクセスできるようにしたいオブジェクトがある場合は、globalキーワードを使用してそのオブジェクトをスコープにインポートできます。ただし、これは通常、それを実行するための最良の方法ではありません。代わりに、を検索することをお勧めしますSingleton Pattern。これにより、特定のクラスが1回だけインスタンス化されるようにし、そのインスタンス化の結果として作成されたオブジェクトにアクセスする方法が提供されます。

于 2012-05-29T02:43:02.967 に答える
0

レジストリパターンは、コード内のどこからでも「グローバル」オブジェクトにアクセスする簡単な方法でもあります。

Zend_Registryをご覧ください:http://framework.zend.com/manual/en/zend.registry.using.html

$myclass = new Myclass();
$mysecondclass = new MySecondClass();
Zend_Registry::set('mysecondclass', $mysecondclass);
$myclass->doSomething();

class Myclass
{
    public function doSomething()
    {
        // use $mysecondclass via the registry
        Zend_Registry::get('mysecondclass')->methodFromSecondClass();
    }
}

class MySecondClass
{
    public function methodFromSecondClass()
    {
        return true;        
    }
}
于 2012-05-29T03:00:05.420 に答える
0

クラスがどのように機能するかに応じて、クラスを拡張することを検討してください...に拡張MyClassするMySecondClassと、親のプロパティ/関数に自動的にアクセスできるようになります。

私のクラス

class MyClass{
    function myFunction(){
         // code here
    }
}

MySecondClass

class MySecondClass extends MyClass{
    function __construct(){
         $this->myFunction();
    }
}
于 2012-05-29T03:09:04.867 に答える