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:
-
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āts5
- 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). - Gala rezultātā tiek veikta konkatenācija
'1'.'1'
(otrais arguments ir string, jo notiek noklusētais type cast). Tiek izdrukāts “11”. - 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.
Lapsa
2013. gada 28. maijā, plkst. 00:25
phpsadness.com
Storms
2013. gada 28. maijā, plkst. 05:37
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...
VP
2013. gada 28. maijā, plkst. 06:48
Interesants raksts http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/ ar pamatīgu, sastrukturētu argumentu kaudzi.
Vilx-
2013. gada 28. maijā, plkst. 11:02
+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.
Mārtiņš
2013. gada 28. maijā, plkst. 07:55
WAT? https://www.destroyallsoftware.com/talks/wat
Miša
2013. gada 28. jūlijā, plkst. 05:39
lol. JS ir smieklīgs.
at0m
2013. gada 28. maijā, plkst. 09:42
Ar echo tak var echo ($somevar) ? 'true' : 'false'; jeb esu kautko palaidis garām.
laacz Autors
2013. gada 28. maijā, plkst. 09:43
Bet nevar <code class="php">true ? echo 'true' : echo 'false'</code>
Tower_9
2013. gada 28. maijā, plkst. 09:48
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...
sn
2013. gada 28. maijā, plkst. 10:25
echo un var_dump() pēdējos x gadus lietoju tikai debugiem.
daGrevis
2013. gada 28. maijā, plkst. 10:46
Nabadziņi, kuriem ir jāprogrammē PHP. :)
Justīne
2013. gada 6. jūnijā, plkst. 20:22
Kurā valodā labāk sākt mācīties programmēt?
Vilx-
2013. gada 28. maijā, plkst. 11:00
Aha, PHP šitādu "WTF" ir vairāk nekā sunim blusu. Mans favorīts - "61529519452809720693702583126814" == "61529519452809720000000000000000"
mm
2013. gada 29. maijā, plkst. 16:47
pameiģini labāk ko šadu for($i=0;$i<99;$i++) { echo'.$i.'+ print($i); }
Karlis
2013. gada 3. jūlijā, plkst. 11:04
Nu šis gan ir jooooppp... Traģiski...
Māris Alksnis
2013. gada 28. maijā, plkst. 14:22
Pirmo reizi redzu, ka kāds reāli izmanto vārdu "konkatenācija"! :D
Krišs
2013. gada 28. maijā, plkst. 22:51
Bet kā vēl? Simbolu virkņu savienošana?
Kirils
2013. gada 29. maijā, plkst. 22:34
damn, es būtu teicis, ka 214 :(