Chyták
Mám tady jeden chyták: (stáhnout)
<?php
if ( )
?>
Bude tento kód fungovat? A proč? Vyvolá nějaké chyby?
Než se podíváte do komentářů, zkuste se nad tím zamyslet, případně si i kód spustit. Ale pozor, je to opravdu chyták.
Diskuse
Tipuji, že ten kód tak jak je vlastně vůbec nic nedělá, tak ani nic vypsat nemůže. Neboli když nic, tak nic.
11.5.2009 03:25:20
Tak jsem ho zkoušel pustit a doopravdy mi nevypsal vůbec nic. Používám WampServer, nejnovější verzi.
11.5.2009 03:38:33
Juraj Hajdúch:
Parse error: syntax error, unexpected ')' in K:\pokusy\jakubvrana\chytak.php on line 2
Ono to asi nejakú definíciu tej podmienky predsa len vyžaduje. Takto vlastne nevie, čo má robiť. No neviem. Na nič iné som neprišiel.
11.5.2009 03:30:33
Juraj Hajdúch:
Jasné, lebo aj nasledujúci kód vyvolá tú istú chybu.
<?php
if(){
print "clear";
}
else{
print "else";
}
?>
11.5.2009 03:36:49
Marek Hám:
Stiahnite si súbor pomocou odkazu stáhnout. Copy & Paste mi nefungovalo.
11.5.2009 03:42:52
Lukáš:
Myslím, že to nebude fungovat ... viděl bych to na parse error, prazdný if být imho nemůže.
11.5.2009 03:39:03
A je ten if opravdu prázdný?
11.5.2009 03:43:46
Marek Hám:
Kód fungovať bude, ale vyvolá Notice: Use of undefined constant  - assumed ' ' in C:\www\ps\tests\test-001.php on line 2
Je to naozaj chyták :), kedy sa v definícii podmienky nachádza "biely" znak dec(160). PHP to vyhodnotí ako použitie nedefinovanej konštanty a použije namiesto nej textovú hodnotu.
11.5.2009 03:41:22
Jak komu (resp. jak které PHP)...
11.5.2009 10:18:16
Juraj Hajdúch:
MÁM TO, díky Marek Hám, ono k tej podmienke naozaj pristupuje ako ku konštante
<?php
define(" ",true);
if ( ){
echo "if";
}
else{
echo "else";
}
// kód vypíše "if"
?>
ale
<?php
define(" ",false);
if ( ){
echo "if";
}
else{
echo "else";
}
// kód vypíše "else"
?>
...ak som zase dačo nepoplietol :o)
11.5.2009 03:58:45
Miloslav Pojman:
Tohle je můj oblíbený:
<?php
System.out.print("Hello world!");
?>
11.5.2009 06:24:27
Tool:
ja teda nevím, ale co je na tom za chyták? Dělá to přesně to, co se dá čekat...
11.5.2009 13:16:38
Diskutující už odhalili, že uvnitř závorek je pevná mezera, kterou PHP uznává jako platný identifikátor (stejně jako všechny znaky z horní poloviny ASCII tabulky). PHP to vyhodnotí jako konstantu, která neexistuje, takže se vyvolá chyba úrovně E_NOTICE a použije se její řetězcová hodnota. Ta se vyhodnotí jako pravda (nejde o prázdný řetězec ani řetězec "0"), takže se vnitřek podmíněného příkazu vykoná.
Ten je ale prázdný, protože PHP příkaz lze ukončit buď středníkem nebo koncem bloku PHP kódu (nikoliv koncem souboru).
Uvedená ukázka je tedy platným PHP kódem, s pevnou mezerou jsem se v reálném kódu už setkal (šlo nicméně jen o překlep, který kromě vyvolání E_NOTICE neměl žádný postranní vliv).
11.5.2009 10:30:50
Srigi:
Uz od zaciatku mi bolo jasne, ze bez zapnutych E_NOTICE nema cenu ani zapinat editor. Typujem, ze Tomas Kulda ich ma vypnute.
11.5.2009 12:30:28
O té platnosti bych s dovolením pochyboval...
> Parse error: syntax error, unexpected ')' in test.php on line 2
PHP 5.2.9
12.5.2009 05:30:06
Zjevně sis příklad nestáhl, ale zkopíroval přes schránku a tvůj prohlížeč změnil pevnou mezeru na normální.
12.5.2009 05:31:54
Ah, to je ono. Díky. Čekal jsem že je to chyták v PHP, ne v zadání. Jdu tím trápit kolegy... (to sis naběhl Kubo, to sis naběhl).
12.5.2009 05:55:57
Juraj Hajdúch:
Tiež som sa takto oklamal. :o)
12.5.2009 08:56:11
Oh, dobrý chyták. S pevnou mezerou jsem se zapotil v minulém týdku a zjistil to až náhodou při exportu kódu do HTML, kdy se z toho stalo . Pak jsem zjistil co to umí.
Ale jako kanadský žertím by to mohlo být dobré, někomu v jeho souborech za pár proměnných přihodit pár pevných mezer :) Škoda, že Apríl je za námi.
12.5.2009 23:38:55
těžkotonážní pusa:
Myslím, že zas tak dlouho by netrvalo, než by na to přišel. Navíc,
<?php if ( ) ?> by rychle odhalil, že tam něco chybí (nebo v tomto případě spíš přebývá). Něco jiného by bylo přidat mu ji do nějakého výrazu, ve kterém figurují nadefinované konstanty.
Já mám takovou „štábní kulturu”, ve které mezery ve výrazech nepíšu.
16.5.2009 02:30:08
podle mě ten kód bude házet error, protože příkaz není zakončen středníkem...
16.5.2009 12:11:25
krata:
nemusí být ukončený středníkem.
u mě na testovacím serveru to hodí
HTTP Error 503. The service is unavailable.
Windows 7 a IIS7 a php 5.2.9
31.5.2009 14:39:44
ggg:
nerobi nic, vo View Source je po stazeni
<?php
if (Â )
?>
tak mi ( ) meni na (Â )
nic, nic
12.9.2010 17:23:13
ggg:
aha, jasne
<pre>
<span style="color: #0000BB"><?php</span>
<span style="color: #007700">if (</span>
<span style="color: #0000BB"> </span>
<span style="color: #007700">)</span>
<span style="color: #0000BB">?></span>
</pre>
12.9.2010 17:29:09