我正在从事一个项目,我正在从过程代码迁移到类体系结构,并且遇到了一些我不知道如何解决的问题。请看以下代码:
// StackOverflow example code
# in file classes/parent_class.php
class Parent_class {
protected $aggregator_array = array();
const TARGET_DATA_LEVEL = 31; // Bit-mask for selecting appropriate aggregation level
public function __construct()
{
$this->child_class_1 = new child_class_1();
$this->child_class_2 = new child_class_2();
}
protected function aggregate_data($data_level, $message, $file, $function, $line)
{
$add2array = $data_level & self::TARGET_DATA_LEVEL;
if ($add2array > 0)
{
// code to create the array's index, based on current time and other factors
$this->aggregator_array[$index] = $message;
}
}
}
# in file classes/child_class_1.php
class child_class_1 extends Parent_class {
private function do_something()
{
// some code here
$data_level = 1; // simulate an error of some kind
$message = 'Foo!';
$this->aggregate_data($data_level, $message, __FILE__, __FUNCTION__, __LINE__);
}
}
# in file classes/child_class_1.php
class child_class_2 extends Parent_class {
private function do_something_else()
{
// some code here
$data_level = 2; // simulate nav message
$message = 'hello world!';
$this->aggregate_data($data_level, $message, __FILE__, __FUNCTION__, __LINE__);
}
}
如您所见,我有一个包含数据聚合方法的父类,以及多个尝试访问同一方法以存储消息以供稍后在脚本运行结束时检索的子类。这一切都很好,只是没有实现意图(将聚合消息收集到中央数组中)。所有对 aggregate_data 的调用都运行良好,但是来自任何子类的调用都会导致将数据存储到该子类自己的 aggregator_array 中,这不是最佳的。当然,我可以做一个 array_merge() 来将子条目插入到父数组中,但是如果我有多个子类(并且我希望有六个或更多),我们正在谈论编码恶梦。我试过使用静态属性,但这显然行不通,因为我
所以我的问题是,如何在不创建同名子属性的情况下从子类更改父对象的属性?
现在我非常乐意使用“非相关”类(例如,从当前子类中删除“扩展 parent_class”),但问题随后转移到如何访问不相关类的属性和方法,而我没有如果可能的话,如何做的最模糊的线索。