重构我的整个类布局后,我仍然无法使用多个类实例。
class User {
public $variable;
public function getUser() {
$this->variable = 'It works!';
return 'bob';
}
}
class Base {}
class One extends Base {
public function test() {
print_r($User->variable); // Want it to print 'It works!'
}
}
$User = new User();
$username = $User->getUser();
if($username === 'bob') {
$One = new One();
$One->test(); // prints "Notice: Undefined property: One::$variable
}
上述代码的作用:类User
获取用户名。如果用户名为bob
,则会创建一个对象one
并尝试打印类User
中的变量。在我的真实代码中,User
非常复杂,并且通过__construct
传递一堆内容并不是我想要的。
我认为解决方案(这就是为什么我将此问题命名为)将在类User
中创建一个新类Base
,但我不能我不得不创建一个全新的对象并重新启动所有内容以获取用户名。
答案 0 :(得分:3)
注入User
个实例:
class One {
private $user;
public function __construct(User $user) {
$this->user = $user;
}
public function test() {
print_r($this->user->variable);
}
}
$User = new User();
$One = new One($user);
$One->test();
这对效率没有任何不当影响,因为实例是通过引用传递而不是复制。
答案 1 :(得分:1)
班级One
不知道$User
变量,因此无法访问它。
您可以将变量传递给构造函数中的类,也可以在创建类的对象后设置它。
class One extends Base {
protected $user;
public function setUser(User $user) {
$this->user = $user;
}
public function One(User $user) {
$this->setUser($user);
}
public function test() {
print_r($this->user->variable);
}
}
或(但请不要,这是不好的做法)将$User
变量设置为全局。
global $User