PHP - 访问类中的非类函数

时间:2017-06-11 15:39:02

标签: php function class constructor member

我的尝试:名为bradpitt.php的文件中有$getSomeData个函数。它功能简单。哪个不在课堂内。我有另一个文件名jolie.php。这个文件正在上课。我试图在该文件中访问$getSomeData()的位置。

CoolPlugin.php

class CoolPlugin extends plugin
{
    const COOLLIST = 'properties/coolBoy.json';

    public function getSomeData () {
        return DataUtil::readDataFile(self::COOLLIST);
    }

bradpitt.php (非类文件 - 一个简单的函数)

$getSomeData = function(){
    $plugin = new \simulator\CoolPlugin();
    return $plugin->getSomeData();
};

jolie.php

include_once 'bradpitt.php';
class Jolie{
    public $getSomeData;
    public function __construct(){
        global $getSomeData;
        $this->$getSomeData();
    }
}

output.php

include_once 'jolie.php';
$joiliePage = new Jolie();
var_dump($joiliePage->getSomeData);

ERROR:
Notice: Undefined variable: joiliePage in output.php on line 173
Notice: Trying to get property of non-object in output.php on line 173
**NULL**

如何在PHP中的另一个类中调用和访问一个简单的函数(作为对象返回)?

我在错误的地方返回NULL?

1 个答案:

答案 0 :(得分:1)

您发布的代码充满了问题。

var_dump($joiliePage->getSomeData);

ERROR:
Notice: Undefined variable: joiliePage in output.php on line 173
Notice: Trying to get property of non-object in output.php on line 173
**NULL**

假设第173行是上面列出的那一行,两个错误消息都说明了同样的事情:变量$joiliePage未初始化(并且解释器认为其值为NULL)。

不要被PHP将其归类为“Notices”这一事实所迷惑。它们是解释器的观点(它找不到变量),但它们是代码的错误,因为它无法继续成功。

include_once 'bradpitt.php';
class Jolie{
    public $getSomeData;
    public function __contruct(){
        global $getSomeData;
        $this->$getSomeData()
    }
}

该函数名为__contruct(),但您可能希望它为“constructor”类。它不是构造函数,并且它不会被解释器自动调用,因为它没有正确的名称。构造函数的名称是__construct()。请注意,代码中缺少中间的“s”。

方法__contruct()声明全局变量$getSomeData如果成功包含文件bradpitt.php(如果文件不存在,则可能会在没有破坏脚本的情况下发出警告失败),$getSomeData符号引用变量在文件bradpitt.php中定义的同名。

但是,调用$this->$getSomeData()并未引用此全局变量。它使用具有相同名称的类'属性,该属性已初始化。此代码将无法运行。

为了调用存储在全局变量$getSomeData中的函数,代码应为:

public function __construct(){
    global $getSomeData;
    $getSomeData();
}

另请注意,该语句在结尾处缺少分号并产生语法错误。您的类定义不正确,无法编译,无法创建Jolie类型的对象。