laacz.lv

Kaspara F. neoficiālā mājaslapa (Anno 1997)

Domā, ka zini PHP?

Būšu godīgs – uzrāvos. Paprovē izlasīt zemāk redzamo PHP kodu un galvā izdomāt, kāds būs izvadītais rezultāts. No peeking! Ieraksta turpinājumā paprovēšu pa soļiem izskaidrot – kāpēc viss ir stipri savādāk, nekā man šķita.

echo '1'.print(2)+3;

Un rezultāts būs 511. Kāpēc, prasīsi? Tad, nu, pa solim:

  1. print nav īsti funkcija, kas nozīmē, ka print(2)+3 izrēķinās no sākuma (2)+3 un pēc tam to izdrukās. Tātad, mums ir izdrukāts 5
  2. Iepriekšminētais print tomēr uzvedās arī kā funkcija, mūžīgi mūžos vienmēr atgriežot 1. Tātad, mēs teorētiski iegūstam '1'.1, kas nav gluži legāls pieraksts PHP (pamēģini), tāpēc uzrakstīsim to šādi: '1'.(1) (legāli).
  3. Gala rezultātā tiek veikta konkatenācija '1'.'1' (otrais arguments ir string, jo notiek noklusētais type cast). Tiek izdrukāts 11.
  4. Tāpēc arī 511.

Rezumējums – nelietojiet iekavas ar print un echo. Tas var mulsināt un iedzīt izmisumā pat pieredzējušu PHP programmētāju.

Bet, kāda tad, ellē ratā, ir starpība starp print un echo?

Ar print tu vari izdrukāt vienu parametru. Piemēram, print 1, 2, 3 nestrādās. Otrām kārtām – print atgriež vērtību, ko nedara echo, attiecīgi – to var daļēji izmantot kā funkciju (($some_var) ? print 'true' : print 'false'; būs ok, bet ar echo tā nevar).

Mūžu dzīvo, mūžu mācies.

P.S. Language wars nepieļaušu. Tas nav šī ieraksta mērķis.

Storms

Ui! Ar datuma funkcijām iekš PHP arī ir pamatīgas auzas. 3 dažādi formāti un katram savi “prikoli”. :)
Nākamā tehnogēnā panika būs “2039.gada problēma”, jo viena no senajām un plaši pielietotājām funkcijām mktime() izrādās ka nesupportē datumus pēc 2038.gada…

Vilx-

+1 par šito. Štrunts par language-war, bet tur noteikti atradīsies vismaz pāris lietas, kuras nebiji iepriekš zinājis, un kuras liks pārdomāt to, cik tieši korekti strādā Tevis rakstītie softi.

Tower_9

Arī man rezultāts šķita savādāks – mūžu dzīvo mūžu mācies. Šķiet ka echo bija arī veiklāks par print.
Es pārsvarā lietoju echo bez iekavām, bet dažreiz tomēr sanāk izmantot print un to kaut kā pierasts lietot ar iekavām…

Iesniegt savu viedokli

Atruna par moderāciju. Daži vārdi, var gadīties, ka ir iz melnās listes (viagra and stuff). Tādi komentāri tiek aizturēti, pirms parādās lapā. Ja Tavs komentārs neparādās uzreizi, būs vien jāpagaida, līdz es jamo izlasīšu. Protams, ka paturu tiesības sev netīkošos komentārus dzēst, iemeslu neminot.