Większość zasobów w PHP nigdy nie dotyczy zarządzania pamięcią, ponieważ sam język jest całkiem niezły w robieniu tego za ciebie. Jednak w PHP często kończy się praca z zewnętrznymi zasobami, które nie są pamięcią - obsługa baz danych, sesje, transakcje bazy danych itp. Te zewnętrzne zasoby mogą być zarządzane najczystrzej z wykorzystaniem pewnej formy obiektu RAII.Czy PHP obsługuje wzorzec RAII? W jaki sposób?
Początkowo sądziłem, że PHP używał schematu zbierania śmieci podobnego do JVM lub CLR, gdzie pojęcie destruktora nie istnieje. (Pamiętaj: Everyone thinks about garbage collection the wrong way - finalizatory nie są destruktorami!) Istnieje specjalna metoda __destruct
, ale myślałem, że był to "finalizator" podobny do finalizatora Java lub C#. Z tego powodu nie można używać RAII na maszynie JVM lub CLR (bloki C# 'using
dostarczają ci około 95% drogi, ale to trochę inaczej ...).
Jednak, Google seems to indicate that PHP supports the RAII pattern, chociaż nie mogę znaleźć potwierdzenia tego w dokumentach PHP. Czy język obsługuje to i czy umieszczenie logiki porządkowania w wystarczającej ilości wystarcza do wykonania zadań RAI?
Kolejna uwaga: gdy wiele obiektów opuścić zakres w tym samym czasie, kolejność ich destruktory są nazywane oficjalnie zdefiniowana, a zazwyczaj w FIFO kolejności (dokładnie przeciwieństwo tego, co jest potrzebne do właściwego RAII). To przełom w mojej szczególnej sprawie użycia. – Brilliand
@Brilliand możesz sztucznie dodawać nawiasy klamrowe, aby wymusić zamawianie? :) – hobbs
Aparat ortodontyczny tego nie zrobi - tylko funkcja może wprowadzić nowy zakres. Nadal możliwe, ale to może oznaczać wiele elementów. – Brilliand