У меня есть некоторые классы, которые совместно используют некоторые атрибуты, и я хотел бы сделать что-то как:
$dog = (Dog) $cat;
это возможно или является там какой-либо универсальной работой вокруг?
Не суперкласс или интерфейс или связанный всегда. Они - всего 2 различных класса, я хотел бы php, отображают атрибуты от класса кошки до собаки и дают мне новый объект. –
я предполагаю, что должен указать, что немного больше причины походит на бессмысленную вещь сделать.
у меня есть классы, который наследовался другой причине родительских классов, я сделал дерево наследования на основе метода сохранения, возможно, мое плохое с начала, но проблема состоит в том, что у меня есть много классов, которые практически равны, но взаимодействуют один с mysql и другим с XML-файлами. таким образом, я имею:
class MySql_SomeEntity extends SomeMysqlInteract{}
и
Xml_SomeEntity extends SomeXmlInteract{}
это - немного более глубокое дерево, но проблема это. я не могу сделать их, наследовался тому же множественному наследованию причины класса, не позволяется, и я не могу отделиться, текущее взаимодействие с причиной superclases было бы большой проблемой.
В основном атрибуты в каждом практичны то же.
так как у меня есть большое это соответствие классы, я хотел бы сделать некоторый универсальный кастинг или что-то как оно, которое может преобразовывать (передать значения каждому атрибуту) и но я пытаюсь искать самый простой путь к каждому из этого классы.
В 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» и реализации приведения типов на уровне пользователя.
Без использования наследования (как упомянул автор), похоже, что вы ищете решение, которое может преобразовать
один класс в другой с предположением, что разработчик знает и понимает сходство двух классов.
Не существует существующего решения для преобразования между объектами. Что вы можете попробовать: