1

私はこのようなクラスを持っています:

// file /models/person.php
class Person 
{
    public function create_path()
    {
         self::log();
         path_helper($this);  //a global function in other php file
    }

    public function log()
    {
         echo "trying to create a path";
    }

}

これはどのようにインスタンス化されるかPersonです:

//file /tools/Builder.php
include('/models/Person.php');
class Builder
{
    public function build()
    {
        $type = 'Person';
        $temp = new $type();
        $temp->create_path();
    } 
}

Person クラスで指摘したように、問題のオブジェクトを$this参照して呼び出しています。ただし、エラーが表示されるため、これは正しくありません。

メッセージ: 未定義の変数: this

$thisオブジェクトが別のスクリプトから作成されているため、他のオブジェクトへの参照ポイントが機能しないか、機能しないと思います。また、selfメソッドの呼び出しに問題がなかったので使用しようとしましたが、パラメーターとして次のようになります。

メッセージ: 未定義の定数 self の使用 - 想定 'self'

それで、正しい方向に私を導くことができますか?

4

2 に答える 2

2

いくつかのマイナーな変更を加えて、コードを自分でテストしました。正常に動作しているようです。

  • self::log()に変更$this->log()
  • グローバル機能を追加しましpath_helperた(これが何をするのかわかりません)

PHP

function path_helper(Person $object)
{
    var_dump($object);
}
class Person 
{
    public function create_path()
    {
         $this->log();
         path_helper($this);  //a global function in other php file
    }

    public function log()
    {
         echo "trying to create a path";
    }

}
class Builder
{
    public function build()
    {
        $type = 'Person';
        $temp = new $type();
        $temp->create_path();
    } 
}

$Build = new Builder();
$Build->build();

結果

trying to create a path

object(Person)[2]

あなたのコードは正しく、正しい方向に進んでいます。

于 2013-01-02T21:07:10.263 に答える
1

次のように log メソッドを呼び出す必要があります。

$this->log();

self:: の使用は静的メソッド用に予約されているためです。

また、次のように path_helper 関数を呼び出してみてください。

path_helper(self);

お役に立てれば幸いです。テストできませんでしたが、動作するはずです。

于 2013-01-02T21:06:31.007 に答える