Posts Tagged ‘php’

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.

Netbeans i PHPUnit – jak ułatwić sobie testy

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

Jak wszyscy (albo i nie) wiedzą, na co dzień korzystam z Netbeans IDE. Niedawno w pracy zmieniliśmy tryb rozwijania oprogramowania na taki, który obejmuje między innymi metodykę TDD (Test Driven Development). Wobec tego faktu, powstała konieczność tworzenia i uruchamiania testów jednostkowych. Netbeans wspiera obie te czynności zapewniając przyjemny graficzny interfejs dla wszystkich związanych z tym operacji, jak również generator plików testów dla klas. read more »

Język Scala dla programistów PHP cz.5 – implicit conversions

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

Jedną ze świetnych i unikalnych cech języka Scala, której PHP nie posiada są tzw implicit conversions zwane też przez oficjalną dokumentację „widokami” (views). Podobny mechanizm zaimplementowany jest w C#, chociaż szczegółów szczerze powiedziawszy nie znam ;). read more »

Transakcje przy użyciu command pattern

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

Ostatnio w pracy miałem za zadanie zrobić upload plików w module zarządzania plikami w firmowym CMS-ie. Jak pewnie się domyślacie, oprócz uploadu samego pliku, należy wpisać jakieś informacje o nim do bazy danych, cały proces jest generalnie dość oczywisty nawet dla początkującego. Jeżeli chcemy zachować spójność operacji – czyli mieć pewność, że nie wpiszemy niczego do bazy jeżeli plik nie został poprawnie wrzucony lub na odwrót, że w razie błędu połączenia z bazą danych plik zostanie usunięty z dysku możemy wybrać dwie drogi postępowania:

  • instrukcje warunkowe (zwane popularnie „ifami” ;p )
  • transakcje

read more »