在类中使用全局变量导致意外语法


Using global variable in my class causing unexpected syntax

我有一个类需要一个在其范围之外定义的变量。所以我尝试使用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语法"问题。寻找遗忘;或者在我的情况下。。。忘记了函数实际上需要单词函数:)