Dar vieno analitiko svetainė

Petras Kudaras

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' ;)