我的尝试:名为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?
答案 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
类型的对象。