假设我有以下课程
# 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
}
}
我想我有一些关于可变范围的问题,但我似乎不明白为什么......
答案 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();
}
}