Skip to content

2.17.2

Latest
Compare
Choose a tag to compare
@koriym koriym released this 10 Sep 16:24
3155fc6

What's Changed

PDOをプロパティに持つクラスは通常シリアライズができませんが、以下のようにPDOではなくPDOのプロバイダーを注入することによりシリアライズが可能になります。

Classes that have PDO as a property cannot normally be serialized, but they can be serialized by injecting a lazy object as follows.

class LazyPdo
{

    private PDO $pdo;

    public function __construct(
        /** ProviderInterface<PDO> */
        #[Set(PDO::class)] private ProviderInterface $pdoProvider
    ) {
        $this->pdoProvider = $pdoProvider;
        $this->initialize($pdoProvider);
    }
    
    public function initialize(ProviderInterface $pdoProvider)
    {
        $this->pdo = $this->pdoProvider->get();
    }
    
    public function __serialize(): array
    {
        return [
            'pdoProvider' => $this->pdoProvider
        ];
    }
    
    public function __unserialize(array $data): void
    {
        $this->pdoProvider = $data['pdoProvider'];
        $this->initialize($data['pdoProvider']);
    }
}

Full Changelog: 2.17.1...2.17.2