我有一个类需要一个在其范围之外定义的变量。所以我尝试使用global
,但这导致了这个错误:
语法错误,意外的"global"(T_global),应为函数(T_function)
我不确定我是把它放错了地方,还是用错了全局关键字。
我的代码如下:
$data = new testClass();
class System
{
private $values;
global $data;
public function __construct()
{
}
public function test()
{
return $data->get();
}
}
$system = new System();
echo $system->test();
所以我想知道如何在类中定义$data
变量?我对global的使用似乎不正确,我还将global声明放在了__contrust()
函数中,但这也不起作用。
在函数中定义全局变量,而不是类:
public function test()
{
global $data;
return $data->get();
}
编辑:备选方案:
class System
{
private $values;
private $thedata;
public function __construct($data)
{
$this->thedata = $data;
}
public function test()
{
return $this->thedata->get();
}
}
$data = new testClass();
$system = new System($data);
echo $system->test();
所以我想知道如何在类中定义$data变量?我对global的使用似乎是不正确的,我也把global声明放在了__contrust()函数中,但这也不起作用。
如果你真的想使用糟糕的global
构造,你应该这样做:
class System
{
private $values;
// removed global from here
public function __construct()
{
}
public function test()
{
// added global here
global $data;
return $data->get();
}
}
但是OOP原则建议我们使用组合,而不是全局变量。因此,您可以通过构造函数或setter将$data
传递到另一个类中。以下是实现这两种方法的一些代码:
class testClass {
public function get()
{
echo __CLASS__.'::'.__FUNCTION__;
}
}
class System
{
private $values;
private $data;
public function __construct(testClass $data = null)
{
if ($data) {
$this->data = $data;
}
}
public function setData(testClass $data)
{
$this->data = $data;
}
public function test()
{
return $this->data->get();
}
}
$data = new testClass();
// via constructor
$system = new System($data);
// or via setter
$system = new System;
$system->setData($data);
echo $system->test();
您可以在实例化类时传递$data
,然后在构造函数中分配它,这将使该类的所有方法都可以使用它。
class System {
public $data;
public function __construct($data) {
$this->data = $data;
}
public function index() {
echo $this->data;
}
}
$data = 'foo';
$system = new System($data);
echo $system->index();
输出"foo";
首先。。。这可能只是一个简单的"糟糕的PHP语法"问题。寻找遗忘;或者在我的情况下。。。忘记了函数实际上需要单词函数:)