假设我是这堂课:
class Loader
{
function library($name)
{
require $name . '.php';
}
}
现在我在控制器中包含了类foo
($ name),如下所示:
class Controller
{
function __construct()
{
$this->load = new Loader();
}
}
class Child_Controller extends Controller
{
function __construct()
{
parent::__construct();
$this->load->library('foo');
init();
}
}
例如,是否可以访问$this
内包含的类?像:
class Child_Controller extends Controller
{
//..construct above..
function init()
{
$this->print('some text');
}
}
其中print
是foo
的方法,其中包括以下类:
class Foo
{
function print($message)
{
echo "your message: " . $message;
}
}
所以,求和,我希望在子控制器中包含$this
,由基本控制器扩展的Loader类包含的所有方法。这可能吗?
或者另一个想法是在Child_Controller中动态创建,这是一个获取所包含类的名称的属性,因此,对于调用foo
的方法,我可以执行以下操作:
$this->Foo->print('some text');
答案 0 :(得分:0)
不,你不能这样做但是你可以在这样的通用属性中存储Foo
时做类似的事情:
class Child_Controller
{
private $lib;
function __construct()
{
parent::__construct();
$this->lib = $this->load->library('Foo');
$this->init();
}
function init()
{
$this->lib->print('Hello World!');
}
}
如果要实例化多个库,而不是使用动态名称作为变量,则应使用以库名作为键的数组,如下所示:
class Child_Controller
{
private $libs = [];
function __construct()
{
parent::__construct();
$this->libs['Foo'] = $this->load->library('Foo');
$this->init();
}
function init()
{
$this->libs['Foo']->print('Hello World!');
}
}
如果您不能使用数组并且绝对必须使用变量名称,您可以这样做:
class Child_Controller
{
function __construct()
{
$var = 'Foo';
$this->{$var} = $this->load->library($var);
$this->init();
}
function init()
{
$this->Foo('Hello World!');
}
}