PHP Fatal PHP Fatal error: метод __clone вызывается для необъекта

Итак, я работаю над проектом, и у меня возникла проблема, поскольку я продолжаю получать как ошибки, так и предупреждения. Я новичок в PHP, так что будьте осторожны. Программа работает нормально, используя PHP 5.5. Однако, когда я запускаю программу в PHP 5.6, я получаю несколько следующих ошибок:

[10 октября 2016 г. 10:04:46 Америка/Денвер] Предупреждение PHP: ошибочный формат данных для десериализации «MMR\Bundle\CodeTyperBundle\Entity\User» в /hermes/bosnaweb14a/b1234/.../application/vendor/ Doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php в строке 833 [10 октября 2016 г. 10:04:46 America/Denver] Уведомление PHP: unserialize(): ошибка по смещению 49 из 50 байтов в /hermes /bosnaweb14a/b1234/.../application/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php в строке 833 [10 октября 2016 г. 10:04:46 Америка/Денвер] Неустранимая ошибка PHP: Метод __clone вызывается для не-объекта в /hermes/bosnaweb14a/b1234/.../application/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php в строке 837.

Информация о проекте

Платформа: Symfony Версия PHP: 5.6

Затронутый код

public function newInstance()
{
    if ($this->_prototype === null) {
        if (PHP_VERSION_ID === 50429 || PHP_VERSION_ID === 50513) {
            $this->_prototype = $this->reflClass->newInstanceWithoutConstructor();
        } else {
           $this->_prototype = unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name)); //Line 833
        }
    }

  return clone $this->_prototype; //Line 837
}

Любая помощь будет принята с благодарностью


person jamHud    schedule 11.10.2016    source источник
comment
Также проверьте is_object($this->_prototype), после if или в качестве второго условия.   -  person JustOnUnderMillions    schedule 11.10.2016
comment
И ваш unserialize не удался PHP Notice: unserialize(): может быть проблема в этом   -  person JustOnUnderMillions    schedule 11.10.2016
comment
Очевидно, что в $this->name есть строка с неэкранированными символами, поэтому функция unserialize() не может ее декодировать.   -  person martin    schedule 12.10.2016
comment
Различаются ли стандарты для unserialize между версиями php? Поскольку он отлично работает с версией 5.5, но не работает в версии 5.6.   -  person jamHud    schedule 13.10.2016


Ответы (1)


Я тестировал:

var_dump(clone $t=unserialize(sprintf('O:%d:"%s":0:{}', strlen('name'), 'name')));

И это работает.

Вы должны проверить значение $this->name, возможно, оно пустое или содержит недопустимые символы.

Где находится $this->name в первую очередь?

person JustOnUnderMillions    schedule 11.10.2016
comment
Спасибо ... я посмотрю на это - person jamHud; 13.10.2016