Posts Tagged ‘php.internals’

Nowości z php.internals – newInstanceWithoutConstructor()

Posted in php, programowanie on sierpień 25th, 2011 by Wojciech Soczyński – 16 Comments

W dzisiejszym wpisie, Sebastian Bergmann, zaproponował dodanie do PHP metody ReflectionClass::newInstanceWithoutConstructor(), która to pozwoliła by na tworzenie nowej instancji klasy z pominięciem konstruktora, podobnie jak to odbywa się w przypadku deserializacji. Osobiście jestem bardzo entuzjastyczny wobec zgłoszonej propozycji i chętnie powitałbym ją w nadchodzącej wersji 5.4 interpretera.

Zastosowań jest całe multum, natomiast chyba najbardziej przydatna jest ta funkcja dla twórców wszelakiej maści frameworków i bibliotek (szczególnie ORM). Dzięki niej, nie trzeba już będzie korzystać ze sztuczek z serialize/deserialize, by stworzyć obiekt z pominięciem konstruktora.

Nowości z php.internals – słabe referencje do obiektów

Posted in php, programowanie on sierpień 2nd, 2011 by Wojciech Soczyński – 8 Comments

Od jakiegoś czasu w zbiorze propozycji nowych „ficzerów” do PHP znajduje się RFC pod tajemniczą nazwą „Weak references”. W czym właściwie jest rzecz i czym są owe „słabe referencje” ? Cały pomysł został zaczerpnięty przez autorów z Javy, C# i Pythona. Rozwiązuje on problem związany ze zwalnianiem pamięci i garbage collectorem. Problem, kiedy mamy zbyt dużo referencji do jakiś obiektów i nie zostają one nigdy zebrane przez GC. Słaba referencja, w przeciwieństwie do standardowej „mocnej” nie powoduje zwiększenia licznika ilości referencji, po którym GC rozpoznaje, czy może już dany obiekt usunąć z pamięci.

Kiedy się to może przydać ? Prosty przykład, stosujemy wzorzec obserwator. Obserwowany obiekt zwany też podmiotem rejestruje subskrybentów, których będzie powiadamiał o zmianie swojego stanu. Takich subskrybentów może być bardzo wielu. Może się zdarzyć, że któryś subskrybent mógłby już zostać usunięty z pamięci przez GC, gdyby nie ta ostatnia referencja, którą trzyma podmiot. W efekcie przy wielu obiektach subskrybentów, tracimy niepotrzebnie pamięć. Rozwiązaniem jest zastosowanie słabej referencji. Dzięki niej, w momencie, gdy wszystkie inne zewnętrzne referencje do danego subskrybenta wygasną zostanie on od razu zebrany przez GC.

Implementacja zaproponowana w RFC postuluje stworzenie klasy SplWeakRef. Jej zastosowanie będzie wymagało tylko przekazania do jej konstruktora zmiennej do obiektu, który ma być słabą referencją.

class Foo {}

$foo = new Foo; //reference count 1
$bar = $foo; //reference count 2

$slabaReferencja = new SplWeakRef($foo); //reference count 2

Jestem ciekaw co sądzicie o tej propozycji ? Osobiście wydaje mi się dość ciekawa, natomiast chyba pole zastosowań jest naprawdę bardzo małe, a potencjalnie może być ten „ficzer” bardzo niebezpieczny w rękach początkujących programistów. Osobiście zamiast tego mechanizmu, wolałbym możliwość deklarowania klas tak, by ich obiekty były przekazywane przez kopię, tak jak typy proste. Moim zdaniem dużo bezpieczniejsze rozwiązanie a efekt podobny.

Nowości z php.internals – php 5.4 alpha 2

Posted in php, programowanie on lipiec 20th, 2011 by Wojciech Soczyński – 3 Comments

Kilka dni temu – 14 lipca, światło dzienne ujrzała nowa odsłona PHP 5.4 – alpha 2. Można ją ściągnąć z http://downloads.php.net/stas/ w wersji „czystej” oraz z http://windows.php.net/qa/ jako binarny plik dla Windows. Kolejna alpha przewidziana jest za 3 lub 4 tygodnie, teoretycznie powinna się pojawić 4-tego sierpnia. Najważniejsze nowości jakie przyniosła ta wersja to przede wszystkim:

O innych nowościach i zmianach możecie przeczytać w logu.

Nowości z php.internals – głosowanie nad nowościami w 5.4

Posted in php, programowanie on lipiec 9th, 2011 by Wojciech Soczyński – 4 Comments

Witam, z racji, że wprowadzono nowy tryb rozwijania PHP, od teraz każdy nowy feature w momencie kiedy jest gotowy, ląduje pod głosowanie, w którym prawo mają brać udział osoby mające konto na wiki.php.net. Najnowsze głosowanie odbywa się nad nowościami, które mają się znaleźć w PHP 5.4. Jego aktualne wyniki możecie znaleźć stronie https://wiki.php.net/todo/php54/vote ,w każdym głosowaniu można również zobaczyć, kto i jak głosował.

Jedną z informacji, która pewnie wielu ucieszy, jest to, że prawdopodobnie przejdzie krótki zapis tablic w postaci:

$someArray = ['jeden' => 1, 'dwa' => 2, 'trzy' => 3];

ostateczną śmierć poniosą również ukochane przez wielu magic_quotes.

Nowości z php.internals – php 5.4 alpha 1

Posted in php, programowanie on czerwiec 29th, 2011 by Wojciech Soczyński – Be the first to comment

Po długich bólach porodowych dostaliśmy do rąk PHP 5.4 w wersji alpha 1. Szczegóły można znaleźć na oficjalnej stronie php. Jest to pierwsze wydanie wg nowego cyklu wydawniczego, który został niedawno zaakceptowany – po szczegóły odsyłam do RFC. Głębszy komentarz wkrótce (muszę się odkopać z „tasków” ;P)