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 回答