Наследование и приведение к классу

Jocontacter

Новичок
Здравствуйте. Вопрос такой:
Имеется базовый класс [BaseClass]
Имеется наследник [ExtendedClass extends BaseClass]
Есть backend и frontend. Они оба используют класс [BaseClass].
frontend обращается к backend, который отсылает ему сериализованный объект [BaseClass]. Но на frontend требуется [ExtendedClass]. как привести малой кровью объект [BaseClass] к [ExtendedClass]?
 

scorpion-ds

Новичок
Разве можно сериализовать целый объект, со всеми его свойствами и методами?
 

weregod

unserializer
Jocontacter
лечится описанием класса (всех родителей/интерфесов) до десериализации инстанции класса

FYI: размещать в сессии объекты - плохая практика
 

fixxxer

К.О.
Партнер клуба
Методы естественно не сериализуются. Они принадлежат классу а не объекту. Сериализуются только данные объекта.
Я тут задумался, и проверил смешную штуку. Результат, конечно, почти ожидаемый, хотя - внезапно exception, я ожидал варнинга :)

PHP:
<?php

class Test {

    protected $func;

    public function __construct(Closure $func) {
        $this->func = $func;
    }

    public function callFunc() {
        $this->func->__invoke();
    }

}

$a = 1;
$T = new Test(function() use($a) { print "test a=$a\n"; });
$T->callFunc();

function test_serialized($s) {
    $test = unserialize($s);
    $test->callFunc();
}

test_serialized(serialize($T));
Код:
$ php test.php 
test a=1

Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'Closure' is not allowed' in /Users/fixxxer/tmp/test.php:26
Stack trace:
#0 /Users/fixxxer/tmp/test.php(26): serialize(Object(Test))
#1 {main}
  thrown in /Users/fixxxer/tmp/test.php on line 26
 

Jocontacter

Новичок
Ну так сделай
PHP:
class ExtendedClass
{
    public static function createByBaseClass(BaseClass $foo)
    {
        // ...
    }
}
Да, я так и сделал, только метод назвал upgrade.
Но просвечивает нарушение принципов ооп и пахнет костылями.

Я понимаю,что у меня ошибка архитектурного плана, но не вижу решения.
то,что пишет weregod, мне не подходит, т.к. класс extended у меня описан на сервере,отвечающем за frontend. Общие-э для backend и frontend - только классы с префиксом Base
 

Jocontacter

Новичок
scorpion-ds
Почитай про сериализацию. И не путай понятия класс и обьект.
 
Сверху