我有一个这样的对象:
CORE::$ObjClassInstABS['ABS']['DATA']
包含一个数组Class->Method
:
array (
'DATA' =>
array (
'USERDATAMANAGER' =>
Class_UserdataManager::__set_state(array(
)),
'PRODDATAMANAGER' =>
Class_ProddataManager::__set_state(array(
)),
),
)
我创建了一个新的类类型为这样的对象:
CORE::$ObjClassInstABS['ABS']['ABSDATAMANAGER'] = new class;
我不能但需要将第一个对象的所有方法都传递给我,而无需将原始类传递给我即时创建的类,这使我可以执行即时声明的类中的功能。这是否存在于php 7.0中,或者有什么方法可以实现?就像将多个类的方法克隆到一个新类中一样。
回答@Damian Dziaduch评论
我用来从目录动态实例化所有类文件的这段代码是这样,并用class实例填充第一个对象:
CORE::$ObjClassInstABS['ABS']['ABSDATAMANAGER']= new class;
foreach (CORE::$ObjClassABS['DATA'] as $key => $name) {
if (strpos($name, 'class.') !== false) {
$name = basename($name);
$name = preg_replace('#\.php#', '', $name);
$names = explode(".", $name);
foreach ($names as $key => $namesr) {
$names[$key] = ucfirst(strtolower($namesr));
}
$name = implode('_', $names);
$NamesClass = $name . 'Manager';
$InstanceClass = strtoupper(preg_replace('#\Class_#', '', $NamesClass));
CORE::$ObjClassInstABS['ABS']['DATA'][$InstanceClass] = $this->$InstanceClass = new $NamesClass();
}
}
结果是在帖子开始处打印的数组CORE::$ObjClassInstABS['ABS']['DATA']
。
如果您在foreach开始时看到我有新的类声明要在循环中使用,我如何在循环中填充CORE::$ObjClassInstABS['ABS']['ABSDATAMANAGER']
第一个对象实例的所有方法,并将其制成可执行文件?
我想(不工作):
foreach ( CORE::$ObjClassInstABS['ABS']['DATA'] as $key => $value ) {
CORE::$ObjClassInstABS['ABS']['ABSDATAMANAGER'] .= Clone($value);
}
$value
表示将方法存储在哪里:
::__set_state(array()),
按照要求。
不确定是否会满足您的要求...问题是您是否能够覆盖 CORE::$ObjClassInstABS
<?php
CORE::$ObjClassInstABS = new class extends \ArrayIterator {
private $container = [];
public function __construct(array $container)
{
$this->container = [
'ABS' => [
'DATA' => [
'USERDATAMANAGER' => new class {},
'PRODDATAMANAGER' => new class {},
],
],
];
}
public function offsetExists($offset)
{
return isset($this->container[$offset]);
}
public function offsetGet($offset)
{
return isset($this->container[$offset]) ? $this->container[$offset] : null;
}
public function offsetSet($offset, $value)
{
if (is_null($offset)) {
$this->container[] = $value;
} else {
$this->container[$offset] = $value;
}
}
public function offsetUnset($offset)
{
unset($this->container[$offset]);
}
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句