2

重组我的整个类布局后,我仍然无法使用多个类实例。

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但我无法解决必须创建一个全新的对象并重新启动一切只是为了获得用户名。

4

2 回答 2

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();

这对效率没有任何不当影响,因为实例是通过引用传递而不是复制。

于 2012-10-21T01:35:49.043 回答
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
于 2012-10-21T01:34:06.510 回答