Þá fer að líða að útgáfu 5 af hinu sívinsæla PHP. Ég ætla að gera stutta samantekt yfir hvað er nýtt og betumbætt í þessari útgáfu. Athugið að þetta er fengið frá heimasíðu php, www.php.net en er ágætt í gúrkutíð sem þessari.

Nú fer að líða að því að hægt sé að segja að php sé object oriented forritunarmál. Í PHP5 er hægt að skilgreina breytur og föll í klösum sem private, protected og public.

Abstract klasar eru einnig orðnir að veruleika, en abstract klasi gengur út að hægt er að skilgreina uppbyggingu klasa, það er segja hvaða breytur og föll hann inniheldur, án þess að útfæra vinnuna sjálfa. Auðvitað er ekki hægt að búa til “instance” af abstract klasa, einungis er hægt að búa til annan klasa sem erfir frá honum. Sama gildir um föll.

Interfaces hafa ekki áður verið studd í PHP en búið er að bæta úr því. Með interface er t.d. hægt að búa til klasa sem erfir frá fleiri en einum öðrum klasa. Spurning svo hvort slíkt fallist undir góð vinnubrögð eða ei.

Nú er einnig hægt að skilgreina af hvaða týpu “færibreytur” eru, það er að segja, nú getur þú skilgreint breytur á þennan hátt:

public function TestMe(MyClass $tmpClass)

Þar sem MyClass er heiti á klasa sem þegar er til. Þetta gerir það að verkum að ekki þarf að athuga sjálfur hvort breyta sem er gefin sé af réttri gerð.

Nú er hægt að skilgreina klasa og föll sem final. Það sem er skilgreint final er ekki hægt að overload-a og klasar sem eru skilgreindir sem final er ekki hægt að erfa frá.

Nú er hægt að útfæra fallið __clone() sjálfur, þetta er nokkurs konar = operator overloading þar sem þú getur ákveðið hvernig afrit af klasanum er gert.

Nú er búið að útfæra constructor og desctructor. Raunar var nokkurs konar constructor til í PHP4 sem virkaði þannig að föll sem báru sama heiti og klasinn var kallað í hvert skipti sem instanec af klasa var búið til. Destructor er alveg nýtt í PHP aftur á móti.

Nú er hægt að búa til constanta sem hefur local scope í klösum.

Núna er hægt að kalla í föll í klösum sem eru fengnir frá function-um. Dæmi:
Function ShapeFactory($shape) {
If ($shape == “circle”) return new Circle();
Else if ($shape == “square”) return new Square();
}
ShapeFactory(“circle”)->Draw();

Nú er boðið upp á static keywordið. Þannig er hægt að kalla í föll í klösum sem eru skilgreind sem static án þess að búa til nýtt instance af þeim klasa. Vitanlega er ekki hægt að nota $this inn í slíkum föllum.

Loksins er kominn nokkurs konar exception handling í PHP. Try og catch hefur verið útfært en því miður er enn enginn stuðningur við finally.

Nú er einnig hægt að gera instanceof sem er notað til að vera viss um að ákveðin breyta vísi til klasa sem hefur verið búið til instance af. Dæmi:
If (! $obj instanceof MyClass) echo “obj is not an instance of MyClass”;

Færibreytur (er það örugglega ekki rétt þýðing á function parameter?) sem eru færðar með bendli (passed by reference) geta nú haft default value. &$breyta = “php” sem dæmi.

Ein mjög sniðug breyting er fallið __autoload. Það er kallað í þetta fall í hvert sinn sem það er búið til nýr instance af klasa. Þetta er t.d. hægt að nota til að include-a þeim skrám sem innihalda klasa útfærsluna. Dæmi:

function __autoload($classname)
{
include_once $classname . “.php”;
}

$obj = new ClassName;

þegar síðasta línan er keyrð, þá kallar php í __autoload fallið, sem sér svo um að include-a php skránni sem inniheldur klasa útfærsluna.

Nú er hægt að yfirskrifa aðgang að föllum og breytum í klösum. Þannig er nokkurn veginn hægt að útfæra property eins og þekkist í C# og Delphi sem dæmi. Föllin heita __get($nm) og __set($nm)

Nú er hægt að yfirskrifa hvernig objectar eru iterataðir með foreach keywordinu. Það er gert með þvi að láta klasa implementa Iterator interface-ið.

Nýjir constantar hafa verið kynntir sem innihalda skrá sem keyrslan er staðsett í, línunúmer og hvaða method. Þessir constantar eru __FILE__ , __LINE__ , __METHOD__

Nú getur þú overloadað __toString() fallið til að skilgreina sjálfur hvernig umbreytingu klasa í streng er framkvæmt.

Þetta er allt saman fengið frá http://de3.php.net/zend-engine-2.php og þar eru góð kóðadæmi um þessa hluti. Ég varð fyrir vonbrigðum með sumt, en ánægður með annað í þessari nýju útgáfu. Hún er vissulega betri en php 4 en mig sárvantar finally og finnst í raun skrítið að það skuli ekki hafa verið útfært í leiðinni. En klasa stuðningurinn er loksins orðinn nothæfur þannig að þeir sem nota php í dag ættu að geta verið nokkuð sáttir.