【发布时间】: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()返回任何东西。 -
我建议您查看autoloading 和dependency injection。它会让你的生活更轻松(并且你的代码更干净)。
-
感谢您的回复,因为我已经说过这只是我项目的一个非常紧凑的版本,我尽量让它尽可能简单。这就是为什么一些电话丢失的原因。
标签: php class scope global-variables instance