[英]php access parent object of a subclass (no inheritance)
我有一个核心类作为收集器,并且有两个子类存储在此核心类的公共变量中:
class Core
{
public $cache;
public $html;
public function __construct()
{
$cache = new Cache();
$html = new Html();
}
}
class Cache
{
public function __construct()
{
}
public function store($value)
{
// do something
}
}
class Html
{
public $foo;
public function __construct()
{
$foo = "bar";
global $core;
$core->cache->store($foo);
}
}
问题:我想摆脱“ global $ core”这一行,并做类似的事情:$ this-> parent-> cache-> store($ foo)$ cache应该以某种方式连接到$ core,因为它是$ core的公共成员
我知道$ html是存储为变量而不是继承的子类。 有任何想法吗?
第二个问题:是否可以在Cache-Class中忽略空的构造函数?
您可以做的是使用依赖项注入的概念在HTML类中注入Cache类的对象,然后使用它来调用方法存储。 我相信这是一个非常好的方法。 所以你可以做这样的事情。
class Core
{
public $cache;
public $html;
public function __construct()
{
$cache = new Cache();
$html = new Html($cache);
}
}
在您的类HTML中:
class Html
{
public $foo;
public function __construct(Cache $cache)
{
$foo = "bar";
$cache->store($foo);
}
}
关于第二个问题,如果不需要在构造函数中做任何事情,则可以忽略它。 但是也没有问题让它也为空。 所以我认为这取决于您。
您的对象无法访问调用者类的方法,因为他对该调用者一无所知。
您可以在创建新对象时尝试传递父对象
class Core {
public $cache;
public $html;
public function __construct() {
$this->cache = new Cache($this);
$this->html = new Html($this);
}
}
class Html {
public $parent;
public function __construct($parent) {
$this->parent = $parent;
if (!empty($this->parent->cache)) {
$this->parent->cache->store();
}
}
}
我可以省略空的构造函数吗?是的,您甚至根本不必声明__construct
方法,因为所有类都具有默认的构造函数/析构函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.