【问题标题】:PHP - set variable in class globally/ read from in another filePHP - 在类中全局设置变量/从另一个文件中读取
【发布时间】:2018-07-13 02:03:28
【问题描述】:

假设我有以下课程

# 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
    }
}

我想我对变量作用域有一些问题,但我似乎不明白为什么......

【问题讨论】:

  • 缺少很多东西。你永远不会调用call(),也不会实例化usersController ,也永远不会调用show()
  • 这里有一个错字:require_once('users_controller.php');t 不见了
  • 你也永远不会从你的函数call()返回任何东西。
  • 我建议您查看autoloadingdependency injection。它会让你的生活更轻松(并且你的代码更干净)。
  • 感谢您的回复,因为我已经说过这只是我项目的一个非常紧凑的版本,我尽量让它尽可能简单。这就是为什么一些电话丢失的原因。

标签: php class scope global-variables instance


【解决方案1】:

对我来说使用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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2018-05-19
    • 2017-04-25
    • 2020-10-29
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多