Tervehdys,
Kertokaa mulle miksi php:tä koodataan sekä <?php että <?
Kysymys koskee oikeastaan ongelmaa combon kanssa:
Kun option rivi on koodattu:
<option value="<?=$koodi?>"><?=$selite?></option>
Toimii esikääntäjä ok ja tulos on toivottu
Mutta jos rivi on koodattu
<option value="<?php=$koodi?>"><?php=$selite?></option>
Esikääntäjä valittaa unexpected '='. välilyönneillä ei ole vaikutusta.
Tuossa ei muuttujien arvoja ole echotettu, vaan halutaan kirjoittaa puhdasta xhtmllää
Elikkä mikä tuon = merkin tarkoitus tuossa on? Mitä sen kuuluisi tehdä? Ei ole tuttu syntaksi mulle.
Eniveis, <?php on suotavampi, mutta laiskoille myös <? on mahdollinen. Se kuitenkin muistaakseni voi mennä jotenkin sekaisin xml -syntaksin kanssa.
PHP:n voi erottaa HTML:stä monella eri tavalla:
https://www.php.net/manual/en/language.basic-syntax.phpmode.php
Merkintä <?php
on yleisin ja toimii kaikkialla. Merkintä <?
toimii vain, jos se on sallittu PHP:n asetuksissa.
Merkintä <?= $koodi ?>
tarkoittaa samaa kuin <? echo $koodi ?>
eli samaa kuin <?php echo $koodi ?>
.
Kaikki kolme tapaa yllä tuottavat saman tuloksen, eli XHTML on yhtä puhdasta.
B_R_H kirjoitti:
Mutta jos rivi on koodattu
<option value="<?php=$koodi?>"><?php=$selite?></option>
Esikääntäjä valittaa unexpected '='. välilyönneillä ei ole vaikutusta.
Tuollaista syntaksia ei ole olemassa. On pelkästään <?=$testi?>
, ja sekin toimii vain jos short_open_tag on päällä.
Kiitti kaikille!
Antti Laaksonen kirjoitti:
Merkintä <?= $koodi ?> tarkoittaa samaa kuin <? echo $koodi ?> eli samaa kuin <?php echo $koodi ?>.
Jos tästä oikein ymmärsin, niin = ja echo ovat synonyymejä - ainakin tässä tapauksessa?
Nuo kolme mainittua toimivat näköjään ihan ok, mutta miksi <?php = $koodi ?>
ei? Koetin hakea tähän selitystä, joten jos viitsitte vielä vääntää rautalangasta?
B_R_H kirjoitti:
Jos tästä oikein ymmärsin, niin = ja echo ovat synonyymejä - ainakin tässä tapauksessa?
Ymmärsit väärin. <?=X?> on synonyymi seuraavalle: <? echo(X); ?>
Siis X voi olla mitä tahansa, jonka voit sijoittaa X:n tilale tuohon jälkimmäiseen.
Tuo on siis <?= ei pelkkä =
B_R_H kirjoitti:
Nuo kolme mainittua toimivat näköjään ihan ok, mutta miksi <?php = $koodi ?> ei?
Ainoa selitys on, että PHP:n kehittäjät ovat päättäneet niin.
Antti Laaksonen kirjoitti:
B_R_H kirjoitti:
Nuo kolme mainittua toimivat näköjään ihan ok, mutta miksi <?php = $koodi ?> ei?
Ainoa selitys on, että PHP:n kehittäjät ovat päättäneet niin.
Ennemmin minusta kannattaisi ajatella asia näin päin: Kaikki echo-vaihtoehdot toimivat, koska se on täysin normaalia koodia — toimiihan echo muuallakin kuin tuossa tilanteessa. Kuitenkin yksittäisiä muuttujia tulostellaan HTML:n sekaan niin usein, tähän on kiva olla jokin lyhyempi tapa. Siksi PHP:n kehittäjät ovat lisänneet merkinnän <?=$x?>. Näin voi lukea myös Grezin viestistä rivien välistä.
XML:n kannalta ei ole mitään merkitystä, millaista PHP:tä seassa on. XML-parseri ei näe alkuperäistä PHP:tä vaan vain sen, mitä PHP-tulkki tulostaa.
Mielenkiintoinen lyhennelmämuoto, mutta en itse lähtisi käyttämään. Taitaa vähän turhaan sekoittaa koodia ja koodaajaa yön hämärinä tunteina :D
Metabolix kirjoitti:
XML:n kannalta ei ole mitään merkitystä, millaista PHP:tä seassa on. XML-parseri ei näe alkuperäistä PHP:tä vaan vain sen, mitä PHP-tulkki tulostaa.
XML prologi ja processing instructionit alkavat merkkiparilla <? ja menevät sekaisin tuon lyhyen PHP-alotustagin kans. Tämä on siis ongelma, jos upottaa PHP:tä XML:n (XHTML:n) sekaan.
Blaze kirjoitti:
XML prologi ja processing instructionit alkavat merkkiparilla <? ja menevät sekaisin tuon lyhyen PHP-alotustagin kans.
Toki, mutta se ei ole XML:n vaan PHP:n ongelma. ;) Viittasin vain tuohon aloitusviestin loppuosaan, josta sai sen käsityksen, että kysyjä luulisi echolla ja <?=:lla olevan jotain eroa XML:n kannalta:
B_R_H kirjoitti:
Tuossa ei muuttujien arvoja ole echotettu, vaan halutaan kirjoittaa puhdasta xhtmllää
Näinhän ei siis ole, vaan <?= on aivan yhtä lailla "echottamista" kuin normaali echo, print, printf tai muu tulostus.
Yeps hoksasin missä mennään. Törmäsinkin jossakin välissä tuohon <? sekoittamiseen xml-dokujen kanssa, mun phpdocin tuottama koodi ei toiminut.
Kiitos selventäjille!
<?= function(); ?>
niin tuollaista yleensä käytetään vain Templatti-tiedostoissa ainakin joidekin koodaustyylin mukaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.