Kleine cursus PHP5
Auteur: Raymond Moesker
Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven als IBM en Oracle en is daarom naar mijn mening een serieuze overweging waard als men moet kiezen tussen J2EE, .NET of PHP5. PHP (Hypertext Preprocessor) is een opensource taal met een C‐achtige syntax en kan alles wat CGI kan. Je kunt PHP ook embeddden in je HTML. PHP draait op alle platformen, is schaalbaar en eenvoudig te programmeren en te onderhouden. Met versie 5 van PHP wordt PHP een echt object georiënteerde taal. Een taal waarin het mogelijk is om klassen, (de)constructors, exception handling, type controle, public, private, protected, abstract en static methoden en attributen te gebruiken. Het is ook mogelijk om objecten te verplaatsen door middel van ‘passing by refference’. PHP wordt gecompileerd naar byte code tijdens de executie van de code, de byte code wordt na compilatie uitgevoerd door de Zend engine. PHP heeft een Garbage Collectior die het geheugen beheer doet. Het is met PHP overigens niet mogelijk om te erven van twee klassen(multiple inheritance) zoals in C++ wel mogelijk is. PHP5 heeft de volgende (object georiënteerde) eigenschappen Inheritance Referenties naar objecten Public, private en protected toegang tot methoden en attributen (information hiding) Final methoden en klassen Abstract methoden en klassen Static methoden en attributen Garbage Collector Constructors en Deconstrutors Interfaces Onderwerpen die ik zal beschrijven zijn:
het opensource zijn van php referenties naar objecten passing by value mogelijkheden tot information hiding constructors en deconstructors interfaces final en abstract functies en klassen static funties exception handling php extensies maken met behulp van C
PHP open source In tegenstelling tot bijvoorbeeld Java en .NET is PHP volledig opensource. Dit kan als je een voorstander bent van opensouce software een reden zijn om PHP te kiezen als ontwikkelomgeving. Een van de voordelen is dat je de code van PHP zelf kunt aanpassen en compileren.
Object georiënteerde eigenschappen Inheritance Met PHP is het mogelijk om objecten te erven. Een object is te erven door het object te extenden. voorbeeld code: class Voorbeeld {} class Uitleg extends Voorbeeld{}
Referenties naar objecten In tegenstelling tot PHP4 krijg je in PHP5 bij het kopiëren van een klasse een referentie naar die klasse. Wil je in PHP5 toch een kopie van een klasse dan kun je functie __clone() aanroepen. Doordat PHP5 met referenties werkt, is het dus ook mogelijk om een object te verplaatsen door middel van 'passing by refference'. In PHP4 was alleen 'passing by value' mogelijk.
Toegang tot methoden en attributen (information hiding) In PHP5 is het mogelijk de toegang tot methoden en attributen te reguleren. Het is mogelijk de methoden en attributen public, private en protected te maken. voorbeeld code: class Voorbeeld {
private $m_iNummer = 10;
public function geefNummer()
{
}
}
return $this‐>m_iNummer ;
Final methoden en klassen Het is mogelijk om methoden en klassen final te maken. Een final methode kan niet overschreven worden in een child klasse en een final klasse kan niet geërfd worden. voorbeeld code: final class Voorbeeld {} class Uitleg extends Voorbeeld{} Dit zal dus resulteren in een foutmelding.
Abstract methoden en klassen Met PHP kun je klassen en methoden abstract maken. Wanneer een klasse abstract is, dan kan er alleen van deze klasse geërfd worden Het is niet mogelijk deze klasse te initialiseren. Als je in een klasse een methode abstract maakt, moet deze methode leeg zijn net als bij een Interface klasse en het is verplicht om de klasse abstract te maken. Een abstracte klasse kan dus zowel abstracte als niet abstracte methoden bevatten. De abstracte methoden zijn verplicht te implementeren in de klasse die erven van de abstracte klasse. voorbeeldcode: abstract class Voorbeeld { abstract function geefNaam($p_sNaam); public function printNummer($p_iNummer) { print $p_iNummer ; } } abstract class Uitleg extends Voorbeeld { public function geefNaam($p_sNaam) { print '
'.$p_sNaam; } } Uitleg::printNummer(10); Geeft 10. Uitleg::geefNaam('Jan'); Geeft Jan;
Static methoden en attributen Static methoden kun je benaderen zonder een instantie te maken van Klasse. Static attributen worden ook wel attributen van de klasse genoemd, een soort globale attributen binnen een klasse. voorbeeld code: class Voorbeeld { static $m_iNummer = 10; static function printNummer() { print self::$m_iNummer; } } Voorbeeld::$m_iNummer++; print Voorbeeld::$m_iNummer Geeft 11. Merk op dat je het atttribuut benadert met twee dubbele punten ::. $l_objVoorbeeld = new Voorbeeld(); $l_objVoorbeeld‐>printNummer(); Geeft 11.
Garbage Collector PHP5 heeft een Garbage Collector die het geheugen beheer doet.
Constructors en Deconstrutors Het is in PHP5 mogelijk om constructors aan te roepen tijdens het creëren van een klasse. De constructor heeft niet zoals gebruikelijk de naam van de klasse maar wordt gecreëerd met de voorgedefinieerde functie __construct(). constructor functie:
function __construct() {}
Het is in PHP5 ook mogelijk om een deconstructor aan te roepen. Meestal is het verstandiger om de deconstructie van een klasse aan de garbage collector over te laten. deconstructor functie:
function __deconstruct() {}
Interfaces Het creëren van interfaces is ook mogelijk met PHP5. Het nut van interfaces is dat je de functionaliteit van een klasse vast kunt leggen. Je kunt er dus mee aangeven welke functies voor deze klasse beschikbaar zijn. voorbeeld code: interface Voorbeeld { public function geefNaam($p_sNaam); public function printNummer($p_iNummer)); } class Uitleg implements Voorbeeld { public function geefNaam($p_sNaam) { print $p_sNaam; } public function printNummer($p_iNummer) { print $p_iNummer ; } }
Exception handling Nieuw in PHP5 is exception handling in de vorm van de try‐throw‐catch methode. Het is alleen toegestaan om objecten te throwen die ge‐erfd zijn van de default Exception klasse. voorbeeld code: class MysqlException extends Exception{//code} class Connector { try { if(!$this‐>m_conConnection = mysql_connect($this‐>m_sServerName, $this‐>m_sUserName, $this‐>m_sServerPassword)) { throw new MysqlException("MysqlException: ".mysql_error()); } else if(!mysql_select_db($this‐>m_sDatabaseName)) { throw new MysqlException("MysqlException: ".mysql_error()); } } catch (MysqlException $e) { print $e‐>toString(); return false; } }
Arrays Leuk om te vermelden is dat arrays PHP eigenlijk hash tables zijn Het zoeken naar een waarde is dan ook van de orde O(1). Doordat er gebruikt gemaakt wordt van hash tables kun je zowel een integer als een string als key gebruiken. Wanneer je een string als key gebruikt, wordt het een associatieve array in PHP genoemd.
Beheren van PHP extensies en PHP libraries PEAR(PHP Extension and Application Repository) is een package management tool voor PHP. Met deze tool is het mogelijk om de volgende soorten PHP Packages te beheren:
PHP library code PHP extensies Met deze tool is het dus mogelijk om bestaande en nieuwe code te distribueren en te hergebruiken.
PHP extensies maken met behulp van C Een van de grote voordelen van het opensource zijn van PHP is dat het dus mogelijk is om zelf PHP extensies te schrijven. Dit is bijvoorbeeld handig om een database connector te schrijven voor een database die PHP niet ondersteunt. Je schrijft je eigen extensie in C, voegt hem toe aan de PHP tree en compileert de PHP code opnieuw. Je extensie is dan klaar voor gebruik en om natuurlijk te delen met de opensource gemeenschap. Dit is natuurlijk wel een te gemakkelijke voorstelling van de werkelijkheid, maar globaal komt het hier wel op neer. Een leuke tutorial over hoe je zelf een extensie kan schrijven in C staat in het boek: PHP5 Power Programming.
PHP5 als Object georiënteerde taal PHP5 is een volwassen object georiënteerde taal gebleken en mag zich naar mijn mening met recht een object georiënteerde taal noemen. Ik ben persoonlijk geen ontwerpprincipes tegen gekomen die niet uit te voeren waren in PHP5. Het feit dat PHP geen strong typed language is zou voor sommigen een discussie punt kunnen zijn over het feit of PHP al dan niet een volwassen object georiënteerde taal is. Ik behoor tot de groep mensen die PHP wel een volwassen object georiënteerde taal vindt. Het feit dat het geen strong typed language language is vergt naar mijn menig meer netheid en kennis van de programmeur en het levert in sommige situaties de flexibiliteit in een taal die soms handig kan zijn. Handig wil niet altijd zeggen mooi. Het is in PHP overigens wel mogelijk te typecasten. voorbeeld code: public function nietMooi() {
if($l_bBool = true)
{
}
else
{
}
return “eenstring”;
return false;
} De vorige code is niet mooi maar kan wel handig zijn en het is aan de programmeur om te bepalen of hij op deze manier wil programmeren. In java had de functie of “public boolean nietMooi()” of “public string nietMooi()” geheten.