... mij uit te leggen hoe PHP onder de motorkap werkt?

Ik kan me nog herinneren dat in mijn Commodore 64 tijd je kon programmeren in de taal 'Basic'. En dat zag er dan zoiets uit:


jeugdsentiment

Ik kan me ook nog herinneren dat ik als klein manneke een keer een boek had gekocht waarmee je een programma kon maken voor de Commodore 64, en met dat programma kon je "makkelijk" sprites maken.

Wat een sprite is?

Niet dit:



Maar bijvoorbeeld deze luchtballon... een simpel plaatje bestaande uit "blokjes". Dat kon je dan over je beeldscherm laten vliegen... WOEEHOOEE... VET!!! ...ja, ehmm oké... ehhh, computers waren in die tijd nog niet zo high-tech als nu hè ;-)


Ik kan me nog goed herinneren dat ik toch wel zo'n 20 bladzijdes met machinetaal heb overgetypt (hoe gek kun je zijn) en uiteindelijk werkte het programma worden boven wonder nog prima ook! (Wat zou er gebeurd zijn als ik 1 tekentje verkeerd had getypt...) Die machinetaal sprak rechtstreeks de processor aan en zag er ongeveer zo uit:


sjhDSWJHJ54e srerkjherERLKG 4546edrfeFJG sdfjh455rrr LKJFGRTEF4556
sdfsdfFHDFDG ZNVFrej34djfdf WEtrrtij45DF 984JJEREkgH 89dfFDVDFkjkg
dffkjERKJ57R FEDKJEr456KJD1 GDFDcvmnoimJ Qxceer44DFg dfljk343GKJKv
.....
.....
enz.

(misschien zag het er in de praktijk iets anders uit, maar zo herinner ik het me)

Nu vraag ik me af... HOE WERKT PHP onder de motorkap? Wie kan (en durft) dat uit te leggen?

Stel we hebben deze code:

<?php

class Foo {

private $bar;

public function __construct($bar) {
$this->bar = $bar;
}

public function getBar() {
return $this->bar;
}
}

$foo = new Foo('phphulp');
echo 'hallo ' . $foo->getBar();

?>
Wat gebeurt er nu onderwater? Hoe wordt deze code omgezet naar een tekst op het beeldscherm? Wat komt er allemaal bij kijken?

Lijkt me leuk als iemand hier iets over kan vertellen :-)
Je hebt het telkens over marco, maar ik neem aan dat je macro bedoelt?

Jep, typo

Dus PHP wordt omgezet in C.

Fout. We hebben de Zend Engine. Deze werkt via het Lexer/Parser principe. Hij zal al jouw code omzetten in [php]tokens[/php]. Bijv:
<?php
$bar = 'bar';
echo 'Foo'.$bar;
?>
Wordt omgezet in:
T_OPEN_TAG
T_VARIABELE T_EQUAL T_ENCAPSED_AND_WHITESPACE;
T_ECHO T_ENCAPSED_AND_WHITESPACE T_CONCAT T_VARIABLE;
T_CLOSE_TAG


Vervolgens wordt dit in een parser gezet. Die zal uit deze tokens opmaken wat hij er mee moet. Als hij een functie tegenkomt zal hij gaan kijken of die functie gedefinieerd is in 1 van de extensies (waaronder al de PHP extensies) en anders kijkt hij of het gedefinieerd is in jouw code. Dan zal hij deze functies aanroepen (in C uiteraard).

Wat er voor stap er voor C zit weet ik niet. Dat gaat me iets te ver om te weten.

P.S. Hoe weet jij dit allemaal? Heb je je jezelf er helemaal in verdiept?

Je weet toch dat ik er van hou om te weten wat er nou gebeurd achter de schermen? Zodra ik ergens in programmeer wil ik weten wat er eigenlijk gebeurd en daarvoor moet je in de source code kijken. Toen Pim eens die link naar de tut stuurde ben ik verkocht en heb me eens hierin verdiept. Het is erg handig om naar te kijken en om dingen van te leren.
Ja, inderdaad handig om te weten... wel leuk. Maar of ik er ooit zo uitgebreid in zal duiken als jij... ???

Reageren