PHP 7: есть ли возможность динамически изменять возвращаемые данные функции с помощью класса отражения или метода отражения - PullRequest
0 голосов
/ 24 октября 2018

Давайте рассмотрим этот код

class MyClass {
  function __call($method, $arguments) {
     // I want to convert the return response from stdClass to SomeClass here and return
  }
}

Class UserClass extends Myclass
{
   protected function test(): SomeClass
   {
     $object = new stdClass();
     $object->id = 1;
     $object->name = 'some';
     return $object; 
   } 
}

Я создаю объект и пытаюсь вызвать защищенную функцию публично

$userClass = new UserClass();
$userClass->test();

Он перейдет к методу __call, поскольку метод тестирования не является открытым

function __call($method, $arguments) {
  // I want to convert the return response from stdClass to SomeClass here and return
} 

Здесь вместо того, чтобы возвращать значение типа SomeClass , я возвращаю объект типа stdClass .Я хочу преобразовать этот объект в тип SomeClass перед возвратом и выдачей ошибки.

protected function test(): SomeClass
{
   $object = new stdClass();
   $object->id = 1;
   $object->name = 'some';
   return $object; 
} 

Возможно ли использовать метод отражения или что-то еще?Ваши предложения высоко ценятся.

1 Ответ

0 голосов
/ 24 октября 2018

Я настоятельно рекомендую, что другие опубликовали.Если у вас есть два разных случая, должны быть две разные функции, обрабатывающие возвращаемое значение.Каждый именуется после того, как возвращается тот или иной тип, т.е.: getUserArray и getUser (если не в одном классе)

Существует также другой подход: в SomeClass реализуется метод toArray, который возвращаетобъект как массив вместо self.тогда вы также понимаете, откуда берется массив и какой структуре он должен следовать.Я советую придерживаться ValueObject вместо массивов, где это возможно.

...