我有一个类需要一个在其范围之外定义的变量。所以我尝试使用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
变量?我对全局的使用似乎是不正确的,我还将全局声明放在__contrust()
函数中,但这也没有用。
答案 0 :(得分:3)
在函数中定义全局变量而不是类:
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();
编辑:替代想法:
timer = new Timer();
this.timer.Interval = 60000;
if(DateTime.Now.TimeOfDay >= System.TimeSpan.Parse("03:00:00") && DateTime.Now.TimeOfDay <= System.TimeSpan.Parse("03:30:00")) { //do something }
答案 1 :(得分:2)
所以我想知道如何在我的班级中定义$ data变量?我对全局的使用似乎是不正确的,我还将全局声明放在__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();
答案 2 :(得分:0)
您可以在实例化类时传递$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();
输出&#39; foo&#39;;
答案 3 :(得分:-1)
第一件事……这可能只是一个简单的“不良PHP语法”问题。寻找被遗忘的;或者就我而言...忘记了功能实际上需要单词 function :)