PHP OOP向上层类声明一个变量


PHP OOP declaring a variable to an upper class

首先,我想写两个类。

<?php
class A
{
    function load($v)
    {
        $this->$v = "stack";
    }
}
class Base
{
    var $lib = null;
    function __construct()
    {
        $this->lib = new A();
    }
}

$bs = new Base();
$bs->lib->load("libx");
// Current calling method
$bs->lib->libx;


// But I want this
$bs->libx;
?>

我写了一个MVC框架。CodeIgniter可以做到,但我做不到。我的英语很差。正因为如此,请不要对我说复杂的话。

您可以在Base中添加一个神奇的__get方法来查找lib中的属性,如果存在则返回:

class A
{
    function load($v)
    {
        $this->$v = "stack";
    }
}
class Base
{
    var $lib = null;
    function __construct()
    {
        $this->lib = new A();
    }
    public function __get($v)
    {
        if (property_exists($this->lib, $v)) {
            return $this->lib->$v;
        }
    }
}

用法:

$bs = new Base();
$bs->lib->load("libx");
echo $bs->lib->libx, PHP_EOL;
echo $bs->libx, PHP_EOL;

输出:

stack
stack