Как бросить объекты в PHP

У меня есть некоторые классы, которые совместно используют некоторые атрибуты, и я хотел бы сделать что-то как:

$dog = (Dog) $cat;

это возможно или является там какой-либо универсальной работой вокруг?

Не суперкласс или интерфейс или связанный всегда. Они - всего 2 различных класса, я хотел бы php, отображают атрибуты от класса кошки до собаки и дают мне новый объект. –

я предполагаю, что должен указать, что немного больше причины походит на бессмысленную вещь сделать.

у меня есть классы, который наследовался другой причине родительских классов, я сделал дерево наследования на основе метода сохранения, возможно, мое плохое с начала, но проблема состоит в том, что у меня есть много классов, которые практически равны, но взаимодействуют один с mysql и другим с XML-файлами. таким образом, я имею:

class MySql_SomeEntity extends SomeMysqlInteract{}

и

Xml_SomeEntity extends SomeXmlInteract{}

это - немного более глубокое дерево, но проблема это. я не могу сделать их, наследовался тому же множественному наследованию причины класса, не позволяется, и я не могу отделиться, текущее взаимодействие с причиной superclases было бы большой проблемой.

В основном атрибуты в каждом практичны то же.

так как у меня есть большое это соответствие классы, я хотел бы сделать некоторый универсальный кастинг или что-то как оно, которое может преобразовывать (передать значения каждому атрибуту) и но я пытаюсь искать самый простой путь к каждому из этого классы.

57
задан Nik 4 April 2019 в 08:36
поделиться

2 ответа

В PHP нет встроенного метода преобразования типов для определенных пользователем объектов. Тем не менее, вот несколько возможных решений:

1) Используйте функцию, подобную приведенной ниже, для десериализации объекта, измените строку так, чтобы необходимые вам свойства были включены в новый объект после его десериализации.

function cast($obj, $to_class) {
  if(class_exists($to_class)) {
    $obj_in = serialize($obj);
    $obj_out = 'O:' . strlen($to_class) . ':"' . $to_class . '":' . substr($obj_in, $obj_in[2] + 7);
    return unserialize($obj_out);
  }
  else
    return false;
}

2) В качестве альтернативы вы можете скопировать свойства объекта, используя отражение / вручную перебирая их все, или используя get_object_vars ().

Эта статья должна просветить вас о «темных уголках PHP» и реализации приведения типов на уровне пользователя.

30
ответ дан 24 November 2019 в 19:45
поделиться

Без использования наследования (как упомянул автор), похоже, что вы ищете решение, которое может преобразовать один класс в другой с предположением, что разработчик знает и понимает сходство двух классов.

Не существует существующего решения для преобразования между объектами. Что вы можете попробовать:

3
ответ дан 24 November 2019 в 19:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: