PHP - 在全局类中设置变量/在另一个文件中读取

时间:2018-02-02 14:33:47

标签: php class scope global-variables instance

假设我有以下课程

# user.php
class User {
    private $name = NULL;

    public function setName($name) {
        $this->name = $name;
    }
    public function getName() {
        return $this->name;
    }
}

我创建了该类的新实例,之后我在 index.php 中包含了另一个PHP文件。

# index.php
require_once('user.php');

$u = new User;
$u->setName('Tom');
echo $u->getName(); // returns Tom

require_once('somefile.php');

现在我的应用程序嵌套了,需要更多的PHP文件。稍后在我的应用中,我打电话给另一个班级,我尝试引用 $u 的实例;

# somefile.php
require_once('users_conroller.php');
function call() {
    new usersController();
}

此功能 getName() 返回 NULL

# users_controller.php
class usersController {
    public function show() {
       global $u;
       echo $u->getName(); // returns NULL
    }
}

我想我有一些关于可变范围的问题,但我似乎不明白为什么......

1 个答案:

答案 0 :(得分:2)

对我来说使用global对于大项目来说并不是一个好主意。它往往是凌乱的。您只需将对象$u作为参数传递即可。

$u = ....
call( $u ); //Call call() function and pass $u object

# somefile.php
require_once('users_controller.php');
function call( $u ) {
    $c = new usersController();
    $c->show( $u );
}


# users_controller.php
class usersController {
    public function show( $u ) {
       echo $u->getName();
    }
}