<?php declare(strict_types=1); namespace Doctrine\DBAL\Types; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Exception\ValueNotConvertible; use function is_resource; use function restore_error_handler; use function serialize; use function set_error_handler; use function stream_get_contents; use function unserialize; /** * Type that maps a PHP array to a clob SQL type. */ class ArrayType extends Type { /** * {@inheritdoc} */ public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform) : string { return $platform->getClobTypeDeclarationSQL($fieldDeclaration); } /** * {@inheritdoc} */ public function convertToDatabaseValue($value, AbstractPlatform $platform) { // @todo 3.0 - $value === null check to save real NULL in database return serialize($value); } /** * {@inheritdoc} */ public function convertToPHPValue($value, AbstractPlatform $platform) { if ($value === null) { return null; } $value = is_resource($value) ? stream_get_contents($value) : $value; set_error_handler(function (int $code, string $message) use ($value) : bool { throw ValueNotConvertible::new($value, $this->getName(), $message); }); try { return unserialize($value); } finally { restore_error_handler(); } } public function getName() : string { return Types::ARRAY; } public function requiresSQLCommentHint(AbstractPlatform $platform) : bool { return true; } }