PHP добавить метод из класса объекта в другой класс объекта - PullRequest
0 голосов
/ 15 марта 2019

У меня есть такой объект:

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

фрагмент кода, который я использовал для динамического создания экземпляра всего классаэто файл из каталога и заполняет первый объект экземпляром класса:

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()),

1 Ответ

0 голосов
/ 15 марта 2019

По запросу.

Не уверен, будет ли это соответствовать вашим требованиям ... Вопрос в том, можете ли вы перезаписать 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]);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...