PHP funkcijos – kažko nesuprantu

Jau prieš keletą mėnesių pastebėjau, kad PHP print() (na ir echo()) yra kažkokios keistos funkcijos ta prasme, kad nebūtina jų argumentus dėti į skliaustelius. Žodžiu veikia abu šie variantai:

print('foo');
print 'foo';

Jei antrą variantą bandysit padaryt su bet kuria kita funkcija – PHP pradės keiktis. Taigi, atsiverčiau PHP manualo skyrių apie „print“. Vat ten radau tokį daiktą:

print() is not actually a real function (it is a language construct) so you are not required to use parentheses with it.

Tai kas per velnias tas „language construct“, ir kodėl tai turi būti dar viena išimtis? Vėlgi grįžtu prie manualo ir ieškau kas tas „language construct“. Jie skiriasi nuo funkcijų tuo, kad function_exists() grąžina FALSE. Dar vienas praktinis skirtumas: „language construct“ negalima iškviesti netiesiogiai, per $func="print"; $func($somevar). Hmmm… Atrodo tie „language constructs“ nieko gero neduoda, tik apriboja ką aš galiu daryt. Ar aš kažko nesuprantu?

Aišku tai dar ne viskas. Tų „language constructs“ yra visokių. Tai ir return(), array(), list(), exit(), echo(), isset(), unset(). Na, dar return ir array suprantu, bet kuo ypatingos kitos funkcijos? Be to, kodėl isset negalima iškviesti be skliaustelių? Hrrr…

if(!function_exists('print')) { print 'print nėra'; } # atspausdina 'print nėra' ;)

5 Comments

  1. nnz ar ce i tema bet dar per print gali printinti tiesiai funkcijos rezultus. su echo to negalima…

  2. cia php, ismoksti ir darai, nereik konstruot kosminiu laivu valdymu stociu.

  3. Language construct reiškia visai nedaug – tai tiesiog php sintaksės konstruktyvas(analogija – operatoriai), todėl php interpretatorius yra savaip(numatytai) apribotas interpretuodamas tokias pseudofunkcijas.

    Tikrosios gi funkcijos yra aiškiai deklaruojamos

    function ([arg list, .. ]).

    Language construct todėl, kad išvardintos php funkcijos yra dažnai(dažniausiai?) naudojamos, ir reikia spėti, kad šių funkcijų kodas php interpretatoriaus viduje yra savotiškai optimizuotas – todėl ir susiduriame su tam tikrais apribojimais, neordinariomis savybėmis.

    Žinoma, reikia žiūrėti source'ą aiškiam atsakymui..

Comments are closed.