Tuplalainausmerkit php:ssä. Mitä eroa on yksi- ja kaksilainausmerkkien välillä PHP:ssä? php pakottavia lainausmerkkejä

Tämä lyhyt artikkeli näyttää kuinka ja missä sitä käytetään lainaukset PHP:ssä.

Yksittäiset lainausmerkit (heittomerkit) PHP:ssä

Yksittäisten lainausmerkkien sisällä olevia merkkijonoja ei jäsennä PHP millään tavalla. Toisin sanoen yksittäiset lainausmerkit edustavat niiden välissä olevaa tekstiä sellaisenaan.

// Oikea kaiku "Kuinka voit?"; echo "Kuinka voit? $nimi"; echo "Kuinka voit? ".$name; // Väärä kaiku "Kuinka voit? $nimi";

Erikoismerkit kerta- ja lainausmerkeissä

Jos esimerkiksi haluat tulkita sarkainmerkin (\t) sarkainmerkiksi, ei vinoviivaksi ja kirjaimeksi t, sinun on suljettava sarkainmerkin sisältävä tekstijono lainausmerkkeihin. Vain \' ja \\ voidaan käyttää yksittäisissä lainausmerkeissä. Kaikki muut estosekvenssit (\n , \r , \$ jne.) eivät ole sallittuja lainausmerkeissä.

// Väärä kaiku "Kuinka voit? \n"; // Oikea kaiku "Kuinka voit? \n";

Voit välttää lainausmerkit merkkijonon sisällä laittamalla lainausmerkit kenoviivan eteen \" .

// Väärä kaiku "

Miten menee?

"; // Oikea kaiku"

Miten menee?

"; kaiku"

Miten menee?

";

Tuplalainausmerkit PHP:ssä

Lainausmerkkien sisällä olevaa tekstiä käsitellään eri tavalla. Esimerkiksi lainausmerkkien sisällä olevat muuttujat korvataan niiden arvoilla. Tämä tekee säveltämisestä kätevää SQL-kyselyt lainausmerkkejä käyttämällä.

$query = "LISÄÄ taulukkoon (viesti,tekijä,teksti,päivämäärä) ARVOT ("$id","$author","$text","$date")";

Millaisia ​​lainausmerkkejä tulisi käyttää merkkijonojen koristeluun - heittomerkkejä vai klassisia kaksoislainausmerkkejä?

Erotetaan kaksois- ja yksittäislainausmerkkien ero PHP:ssä ja selvitetään esimerkkien avulla, milloin kumpaa käyttää.

Muuttujat ja pakosarjat for erikoismerkit, joita esiintyy lainausmerkkien sisällä olevissa merkkijonoissa, ei käsitellä. PHP-tulkki käsittelee heittomerkkien ympärillä olevat merkkijonot paljon nopeammin kuin vastaavat lainausmerkeillä reunustetut merkkijonot.

Syy tähän on yksinkertainen: PHP-tulkki tarkistaa lisäksi lainausmerkeissä olevien merkkijonojen muuttujien olemassaolon, ja jos sellaisia ​​on, sen arvo lisätään merkkijonoon muuttujan nimen sijaan. Mutta heittomerkkien sisällä olevan merkkijonon tulkki havaitsee pelkkänä tekstinä, eikä PHP tee mitään muunnoksia näissä merkkijonoissa. Mielestäni on selvää, että merkkijonojen käsittely yksittäisissä lainausmerkeissä on joka tapauksessa nopeampaa.

Aluksi kuvailemme, kuinka merkkijono määritellään, ja sitten tarkistamme, kuinka paljon nopeampaa merkkijonojen käsittely yksittäisissä lainausmerkeissä on.

Helpoin tapa määrittää merkkijono on sulkea se kertalainausmerkkeihin ("). Jotta yksittäisten lainausmerkkien sisällä käytetään yksittäisiä lainausmerkkejä, niitä edeltää kenoviiva (\), eli estomerkki. Jos kenoviivan on oltava ennen yksittäistä lainausmerkkiä tai merkkijonon lopussa, sinun on kopioitava se Jos yrität välttää minkä tahansa muun merkin, myös kenoviiva tulostetaan.

Tässä on esimerkki yksittäisten lainausmerkkien käytöstä:
// Tulos: Yksinkertainen merkkijono
kaiku "Yksinkertainen merkkijono";
// Tulos: Olen täällä
echo "Olen täällä";
// Tulostus: Tämä ei lisää rivinvaihtoa: \n
echo "Tämä ei lisää: \n rivinvaihtoa";
// Tulos: $example-muuttujaa ei myöskään korvata
echo "Muuttujaa $example ei myöskään korvata"; Jos merkkijono on lainausmerkkien (") sisällä, PHP tunnistaa enemmän erotussarjoja erikoismerkeille ja korvaa myös muuttujan nimen arvon merkkijonossa. Aivan kuten lainausmerkeissä, jotta lainausmerkkejä käytetään merkkijonon sisällä. lainausmerkit, niitä edeltää kenoviiva (\).

Tässä on esimerkki lainausmerkkien käytöstä:
// Tulos: Yksinkertainen merkkijono
kaiku "Yksinkertainen merkkijono";
// Tulos: Yritys "Lumikello ""
echo "Yritys \"Snowdrop\"";
// Tulostus: Tämä muuttuu uudelle riville
echo "Tämä käännetään uudelle riville \n";
// Tulostus: Muuttuja korvataan
$esimerkki = "korvaava";
echo "Muuttuja $esimerkki"; Muista myös, että sekvenssi "\n" (uusi rivi), "\r" (rivinvaihto) on tarkoitettu vain tekstille, ei HTML:lle. Joten selaimessa et näe muutoksia (vain lähdekoodi sivut).

Selvitetään kuinka paljon nopeampia lainausmerkkejä ovat kuin kaksoislainausmerkit. Mittauksia varten kirjoitamme lyhyen testiskriptin, ja huomaamme heti, että jos testaat sen itse, tulokset, jotka riippuvat tietokoneesi tai palvelimesi laitteistosta, ovat erilaisia.
// Palauta aikaleima silmukan alussa
$aloitus = mikroaika(tosi);
// Luo silmukkasilmukka miljoonalle iteraatiolle
for ($i = 0; $i< 1000000; $i++) {
$text = "Merkkijono tässä";
}
// Laske kulunut aika
$aika = (mikroaika(tosi) - $aloitus); Tulos: 0,09 sekuntia.

Jos korvaamme yksittäiset lainausmerkit kaksoislainausmerkeillä:
$text = "Merkkijono tässä"; Tulos on 0,10 sekuntia.

Kuten näette, tekstimerkkijonoja käytettäessä ero suoritusajassa on hyvin pieni, voidaan jopa sanoa, että sitä ei ole ollenkaan. Mielenkiintoisin alkaa, kun yritämme yhdistää merkkijonon ja muuttujan.
$text = "Merkkijono $i tässä"; tai
$teksti = $i."Tämä on merkkijono"; Tulos noin: 0,27 sekuntia.

Ero on hyvin havaittavissa. Kytkentä ja lainausmerkit vaikuttavat selvästi suorituskykyyn, jos merkkijonoon lisätään muuttujia.

Kun palvelin käsittelee koodin, se tarkistaa koko lainausmerkkien sisällön muuttujien, vakioiden ja muiden varalta. Se vie aikaa. Ja sen, mikä on yksittäisten lainausten välissä, palvelin käsittelee valmiiksi tekstiksi, eikä sillä ole väliä mitä siellä on. Ero kerta- ja kaksoislainausmerkkien suorituskyvyn välillä on hyvin pieni, mutta jos kehität erittäin kuormitettua projektia, niin muutama säästetty millisekunti on jo voitto.

PHP:n merkkijono on sarja minkä tahansa pituisia merkkejä. Toisin kuin C, merkkijonot voivat sisältää myös nollamerkkejä, jotka eivät vaikuta ohjelmaan millään tavalla. Toisin sanoen merkkijonoja voidaan käyttää binääritietojen tallentamiseen. Merkkijonon pituutta rajoittaa vain vapaan RAM-muistin määrä.

PHP:ssä merkki on sama kuin tavu, mikä tarkoittaa, että tarkalleen 256 eri merkkiä on mahdollista. Tämä tarkoittaa myös sitä, että PHP:llä ei ole sisäänrakennettua Unicode-tukea. Toiminnot tarjoavat jonkin verran tukea Unicodelle utf8_encode() Ja utf8_decode() .

Merkkijonoa voidaan helposti käsitellä vakiofunktioilla, ja mitä tahansa sen merkkiä voidaan käyttää myös suoraan.

Yksinkertainen esimerkki merkkijonomuuttujasta:

$a= "Tämä on vain merkkijonomuuttujaan kirjoitettua tekstiä";
kaiku $a; //Tulostaa "Tämä on vain merkkijonomuuttujaan kirjoitettua tekstiä"
?>

Tarkastellaan nyt lähemmin tietotyypin syntaksia. merkkijono.

Tyypin merkkijono (merkkijonot) syntaksi

Merkkijono voidaan määritellä kolmella eri tavalla.

Yksinkertaisin tapa määrittää merkkijono on laittaa se lainausmerkkeihin (symboli " ).

Jos haluat käyttää yhtä lainausmerkkiä merkkijonossa, kuten monissa muissa kielissä, sitä edeltää kenoviiva ( \ ), eli suojaa se. Jos kenoviivan on oltava ennen yhtä lainausta tai merkkijonon lopussa, sinun on kopioitava se. Huomaa, että jos yrität välttää minkä tahansa muun merkin, myös kenoviiva tulostetaan! Joten itse kenoviivaa ei yleensä tarvitse paeta.

Toisin kuin kaksi muuta syntaksia, muuttuja- ja erotussekvenssit erikoismerkeille, jotka esiintyvät merkkijonoissa, jotka on suljettu Ei käsitelty.

Tässä on esimerkki yksittäisten lainausmerkkien käytöstä:

kaiku "tämä on yksinkertainen merkkijono";

kaiku "Voit myös lisätä riveihin
rivinvaihtohahmo kuin tämä
koska se on okei"
;

// Tulos: Eräänä päivänä Arnold sanoi: "Tulen takaisin"
kaiku "Eräänä päivänä Arnold sanoi: "Tulen takaisin"";

kaiku "Poistitko C:\\*.*?";

// Tulostus: Poistitko C:\*.*?
echo "Poistitko C:\*.*?" ;

// Tulostus: Tämä ei lisää rivinvaihtoa: \n
kaiku "Tämä ei lisää: \n uutta riviä";

// Tulos: $expand-muuttujia ei myöskään korvata $kummallakaan
kaiku "Muuttujat $expand eivät myöskään korvaa $kumpaakaan";
?>

Jos merkkijono on lainausmerkkien sisällä ( " ), PHP tunnistaa enemmän erotussarjoja erikoismerkeille:

Pakopöytä:

Jakso Merkitys
\n rivinvaihto (LF tai 0x0A (10) ASCII:ssa)
\r vaunun paluu (CR tai 0x0D (13) ASCII:ssa)
\t vaakasuora välilehti (HT tai 0x09 (9) ASCII:ssa)
\\ kenoviiva
\$ dollarin merkki
\" kaksoislainaus
\{1,3} merkkijono, joka vastaa säännöllistä lauseketta, oktaalimerkkiä
\x(1,2) säännöllistä lauseketta vastaava merkkijono, heksadesimaalimerkki

Jälleen, jos haluat muistella minkä tahansa muun merkin, kenoviiva tulostetaan myös!

Toinen tapa määritellä merkkijonoja on käyttää heredoc-syntaksi ("<<< "). Jälkeen<<< необходимо указать идентификатор, затем идет строка, а потом этот же идентификатор, закрывающий вставку.

Päättävän tunnisteen on alettava rivin ensimmäisestä sarakkeesta. Lisäksi tunnisteen on noudatettava samoja nimeämiskäytäntöjä kuin kaikkien muiden PHP-tunnisteiden: sisältää vain aakkosnumeerisia merkkejä ja alaviivoja, ja sen on alettava ei-numerolla tai alaviivalla.

Huomio! On erittäin tärkeää huomata, että merkkijono, jossa on sulkeva tunniste, ei sisällä muita merkkejä, paitsi ehkä puolipiste ( ; ). Tämä tarkoittaa, että se on tunniste ja että puolipisteen edessä tai jälkeen ei saa olla välilyöntejä tai sarkaimia. On myös tärkeää ymmärtää, että ensimmäisen merkin ennen sulkevaa tunnistetta on oltava rivinvaihtomerkki käyttöjärjestelmäsi määrittelemällä tavalla. Esimerkiksi Windows®-käyttöjärjestelmässä tämä on \r.

Jos tätä sääntöä rikotaan ja sulkeva tunniste ei ole "puhdas", katsotaan, että sulkevaa tunnistetta ei ole ja PHP jatkaa sen etsimistä. Jos tässä tapauksessa oikeaa sulkevaa tunnistetta ei koskaan löydy, se aiheuttaa käsittelyvirheen, jossa komentosarjan lopussa on rivinumero.

Heredoc-teksti käyttäytyy samalla tavalla kuin lainausmerkkijono ilman niitä. Tämä tarkoittaa, että sinun ei tarvitse pakottaa lainausmerkkejä heredocissa, mutta voit silti käyttää yllä olevia erotussarjoja. Muuttujat käsitellään, mutta sinun on oltava yhtä varovainen käytettäessä monimutkaisia ​​muuttujia heredocin sisällä kuin käyttäisit merkkijonoja.

Heredoc-merkkijonomäärittelyesimerkki:

$str =<<Esimerkki rivistä,
kattaa useita rivejä
käyttämällä heredoc-syntaksia.
EOD;

/* Monimutkaisempi esimerkki muuttujilla. */
luokan foo
{
var $foo ;
var $bar ;

functionfoo()
{
$this -> foo = "foo" ;
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
}
}

$foo = newfoo();
$nimi = "OmaNimi" ;

kaiku<<Nimeni on "$nimi". Kirjoitan $foo-> foo.
Nyt otan pois
($foo -> baari [ 1 ]) .
Tämän pitäisi tulostaa iso "A":
\x41
EOT;
?>

En ole PHP-ohjelmoinnin asiantuntija, mutta olen hieman hämmentynyt, miksi näen PHP:ssä koodia, jossa on yksi- ja joskus lainausmerkkien sisällä oleva merkkijono.

Tiedän vain, että .NET- tai C-kielessä, jos se on lainausmerkeissä, se tarkoittaa, että se on merkki eikä merkkijono.

Ratkaisu

Mitä sinun pitäisi tietää

$a = "nimi"; $b = "my$a"; == "nimeni" $c = "minun $a"; != "nimeni"

PHP:ssä ihmiset käyttävät yksittäisiä lainausmerkkejä määrittämään vakiomerkkijonoa, kuten "a" , "my name" , "abc xyz", kun taas kaksoislainausmerkkiä käyttäen määritellään merkkijono, joka sisältää tunnisteen, kuten "a $b $c $d" .

Ja toinen asia

echo "nimeni";

nopeammin kuin

echo "nimeni";

echo "minun" . $a;

hitaampi kuin

echo "minun $a";

Tämä pätee muihinkin käytössä oleviin merkkijonoihin.

PHP:ssä lainausmerkeissä olevaa tekstiä käsitellään merkkijonoarvona, kun taas lainausmerkeissä oleva teksti jäsentää muuttujat korvaamalla ja käsittelemällä niiden arvon.

$test = "muuttuja"; echo "Hei herra $testi"; // tulos olisi: Hello Mr muuttuja echo "Hello Mr $test"; // tuloste olisi: Hei herra $test

Tässä kaksoislainausmerkki jäsentää arvon ja lainausmerkkiä käsitellään merkkijonoarvona (jäsentämättä $test-muuttujaa).

Molemmat sisäkkäiset merkit ovat merkkijonoja. On kätevää käyttää yhden tyyppistä lainausta toisen tyyppisen lainauksen tekemiseen. """ ja """ . Suurin ero lainaustyyppien välillä on, että sisäkkäiset tunnisteviitteet korvataan kaksoislainausmerkkien sisällä, ei yksittäisten lainausmerkkien sisällä.

Merkkijono on joukko merkkejä. PHP:ssä merkki on sama kuin tavu, mikä tarkoittaa, että tarkalleen 256 eri merkkiä on mahdollista. Tämä tarkoittaa myös sitä, että PHP:llä ei ole alkuperäistä Unicode-tukea, vaan osa Unicode-tuesta on utf8_encode()- ja utf8_decode()-funktioiden avulla.

Huomautus: Ei ongelmaa, jos merkkijono on erittäin suuri. PHP:n asettamien merkkijonojen koolle ei ole käytännössä mitään rajoituksia, joten niiden pituudesta ei ole mitään syytä huoleen.

Syntaksi

    Merkkijono voidaan määritellä kolmella eri tavalla.

Yksittäiset lainaukset

Yksinkertaisin tapa määrittää merkkijono on sulkea se yksittäisiin lainausmerkkeihin ("-merkki).

Jos haluat käyttää yhtä lainausmerkkiä merkkijonossa, kuten monissa muissa kielissä, sitä edeltää kenoviiva (\), eli erotusmerkki. Jos kenoviivan on oltava ennen yhtä lainausta tai merkkijonon lopussa, sinun on kopioitava se. Huomaa, että jos yrität välttää minkä tahansa muun merkin, myös kenoviiva tulostetaan! Joten itse kenoviivaa ei yleensä tarvitse paeta.

Huomautus: PHP 3:ssa E_NOTICE-tason sanoma lähetetään tässä tapauksessa.

Huomautus: Toisin kuin kaksi muuta syntaksia, yksittäisissä lainausmerkeissä esiintyvien erikoismerkkien muuttujia ja erotussarjoja ei käsitellä.

echo "tämä on yksinkertainen merkkijono"; echo "Voit myös lisätä rivinvaihtoja tällaisiin merkkijonoihin, koska se on hyvä"; // Tulostus: Eräänä päivänä Arnold sanoi "I"ll be back" echo "Eräänä päivänä Arnold sanoi "I\"ll be back""; // Tulostus: Poistitko C:\*.*? echo "Poistitko C:\\*.*?"; // Tulostus: Poistitko C:\*.*? echo "Poistitko C:\*.*?"; // Tulostus: Tämä ei lisää: \n rivinvaihto kaiku "Tämä ei lisää: \n rivinvaihtoa"; // Tulos: $expand muuttujia ei myöskään korvata $joko echo "Ei myöskään $expand-muuttujia korvata $joko";

Tuplalainausmerkit

Jos merkkijono on lainausmerkkien (") sisällä, PHP tunnistaa enemmän erotussarjoja erikoismerkeille:

Taulukko 11-1. Pakojaksot

Jälleen, jos haluat muistella minkä tahansa muun merkin, kenoviiva tulostetaan myös!

Mutta kaksilainausmerkkisten merkkijonojen tärkein ominaisuus on muuttujan käsittely. Katso lisätietoja kohdasta Merkkijonojen käsittely.

Heredoc

Toinen tapa määrittää merkkijonoja on käyttää heredoc-syntaksia ("

Päättävän tunnisteen on alettava rivin ensimmäisestä sarakkeesta. Lisäksi tunnisteen on noudatettava samoja nimeämiskäytäntöjä kuin kaikkien muiden PHP-tunnisteiden: sisältää vain aakkosnumeerisia merkkejä ja alaviivoja, ja sen on alettava ei-numerolla tai alaviivalla.

Huomio

On erittäin tärkeää huomata, että merkkijono, jossa on sulkeva tunniste, ei sisällä muita merkkejä, lukuun ottamatta mahdollisesti puolipistettä (;). Tämä tarkoittaa, että tunnistetta ei saa sisentää eikä puolipisteen edessä tai jälkeen saa olla välilyöntejä tai sarkaimia. On myös tärkeää ymmärtää, että ensimmäisen merkin ennen sulkevaa tunnistetta on oltava rivinvaihtomerkki käyttöjärjestelmäsi määrittelemällä tavalla. Esimerkiksi Macintoshissa se on \r.

Jos tätä sääntöä rikotaan ja sulkeva tunniste ei ole "puhdas", katsotaan, että sulkevaa tunnistetta ei ole ja PHP jatkaa sen etsimistä. Jos tässä tapauksessa oikeaa sulkevaa tunnistetta ei koskaan löydy, se aiheuttaa käsittelyvirheen, jossa komentosarjan lopussa on rivinumero.

Heredoc-teksti käyttäytyy samalla tavalla kuin kaksoislainausmerkkijono ilman niitä. Tämä tarkoittaa, että sinun ei tarvitse pakottaa lainausmerkkejä heredocissa, mutta voit silti käyttää yllä olevia erotussarjoja. Muuttujat käsitellään, mutta sinun on oltava yhtä varovainen käytettäessä monimutkaisia ​​muuttujia heredocin sisällä kuin käyttäisit merkkijonoja.

Esimerkki 11-2. Heredoc-merkkijonomäärittelyesimerkki

$str =<<foo="foo"; $this->bar = array("Bar1", "Bar2", "Bar3"); ) ) $foo = uusi foo(); $nimi = "OmaNimi"; kaiku<<foo. Nyt tulostan ($foo->bar). Tämän pitäisi tulostaa isot kirjaimet "A": \x41 EOT;

Huomautus: heredoc-tuki lisättiin PHP 4:ään.

Muuttujien käsittely

Jos merkkijono määritellään lainausmerkeissä tai heredoc-merkillä, sen sisällä olevat muuttujat käsitellään.

Syntaksia on kahta tyyppiä: yksinkertainen ja monimutkainen. Yksinkertainen syntaksi on helpompaa ja kätevämpää. Sen avulla voit käsitellä muuttujaa, taulukon arvoa (taulukko) tai objektin ominaisuutta (objekti).

Monimutkainen syntaksi otettiin käyttöön PHP 4:ssä, ja se voidaan tunnistaa lauseketta ympäröivistä aaltosulkeista.

Yksinkertainen syntaksi

Jos tulkki kohtaa dollarimerkin ($), se kaappaa mahdollisimman monta merkkiä kelvollisen muuttujan nimen muodostamiseksi. Jos haluat määrittää nimen lopun, kirjoita muuttujan nimi aaltosulkeisiin.

$olut = "Heineken"; echo "$oluen maku on mahtava"; // toimii, """ on virheellinen merkki muuttujan nimessä echo "Hän joi $olutta"; // ei toimi, "s" on kelvollinen merkki muuttujan nimelle echo "Hän joi $(olutta)"; // teokset echo "Hän joi ($olutta)"; // toimii

Vastaavasti voidaan käsitellä taulukon elementtiä (array) tai objektin (objektin) ominaisuutta. Taulukkoindekseissä sulkeva hakasulku (]) merkitsee indeksin määritelmän loppua. Objektin ominaisuuksiin pätevät samat säännöt kuin yksinkertaisiin muuttujiin, vaikka niissä ei ole mitään temppuja, kuten muuttujia.

// Nämä esimerkit koskevat erityisesti taulukoiden käyttöä // merkkijonojen sisällä. Merkitse aina //-taulukon merkkijonoavaimet merkkijonojen ulkopuolella lainausmerkkeihin, äläkä käytä merkkijonojen (sulkeiden) ulkopuolella. // Näytä kaikki virheet error_reporting(E_ALL); $hedelmät = array("mansikka" => "punainen", "banaani" => "keltainen"); // Toimii, mutta huomaa, että se toimii eri tavalla lainatun merkkijonon ulkopuolella echo "Banaani on $hedelmiä."; //Toimii echo "Banaani on ($hedelmät["banaani"])."; // Toimii, mutta PHP, kuten alla on kuvattu, etsii ensin // banaanivakion. echo "Banaani on ($hedelmät)."; // Ei toimi, käytä kiharoita. Tämä aiheuttaa käsittelyvirheen. echo "Banaani on $hedelmiä["banaani"]."; // echo "Banaani on" toimii. $hedelmät["banaani"] . "."; // Works echo "Tämä neliö on $neliö->leveys metriä leveä."; // Ei toimi. Katso ratkaisun monimutkainen syntaksi. echo "Tämä neliö on $neliö->leveys00 senttimetriä leveä.";

Jos kyseessä on monimutkaisempi, sinun on käytettävä monimutkaista syntaksia.

Monimutkainen (kihara) syntaksi

Sitä ei kutsuta kompleksiseksi siksi, että se on vaikea ymmärtää, vaan koska se sallii monimutkaisten ilmaisujen käytön.

Itse asiassa voit sisällyttää riville minkä tahansa nimiavaruuden arvon tällä syntaksilla. Kirjoitat lausekkeen samalla tavalla kuin merkkijonon ulkopuolelle ja kierrät sen sitten ( ja ). Koska et voi välttää "(" -merkkiä, tämä syntaksi tunnistetaan vain, kun $ seuraa välittömästi (.) (Käytä "(\$" tai "\($") näyttääksesi "($").). Muutamia havainnollistavia esimerkkejä):

// Näytä kaikki virheet error_reporting(E_ALL); $hieno = "fantastinen"; // Ei toimi, tulostaa: Tämä on ( fantastinen) kaiku "Tämä on ( $hieno)"; // Toimii, tulostaa: Tämä on fantastinen kaiku "Tämä on ($hieno)"; echo "Tämä on $(hieno)"; // Works echo "Tämä neliö on ($neliö->leveys)00 senttimetriä leveä."; // Toimii echo "Tämä toimii: ($arr)"; // Tämä on väärin samasta syystä kuin $foo on väärässä // rivin ulkopuolella. Toisin sanoen tämä // toimii edelleen, mutta koska PHP etsii ensin foo-vakiota, se antaa // E_NOTICE (määrittämätön vakio) -tason virheen. echo "Tämä on väärin: ($arr)"; // Toimii. Kun käytät moniulotteisia taulukoita, käytä aina kiharoita aaltosulkeiden sisällä // strings echo "Tämä toimii: ($arr["foo"])"; // Toimii. echo "Tämä toimii: " . $arr["foo"]; echo "Voit jopa kirjoittaa ($obj->arvot->nimi)"; echo "Tämä on muuttujan $nimi arvo: ($($nimi))";

Merkkijonon merkin käyttäminen ja sen muuttaminen

Merkkijonoissa olevia merkkejä voidaan käyttää ja muokata määrittämällä niiden siirtymä merkkijonon alusta alkaen nollasta ja merkkijonon jälkeen aaltosulkeissa.

Huomautus: Taaksepäin yhteensopivuuden vuoksi sinulla on edelleen mahdollisuus käyttää taulukkosulkeja samaan tarkoitukseen. Tämä syntaksi on kuitenkin vanhentunut PHP 4:stä lähtien.

Esimerkki 11-3. Muutama merkkijonoesimerkki

// Hanki merkkijonon ensimmäinen merkki $str = "Tämä on testi."; $ensimmäinen = $str(0); // Hanki merkkijonon kolmas merkki $kolmas = $str(2); // Hae merkkijonon viimeinen merkki $str = "Tämä on vielä testi."; $viimeinen = $str(strlen($str)-1); // Muuta merkkijonon viimeistä merkkiä $str = "Katso merta"; $str(strlen($str)-1) = "minä";

Hyödylliset toiminnot ja operaattorit

Merkkijonot voidaan ketjuttaa käyttämällä "." (piste). Huomaa, että summausoperaattori "+" ei toimi tässä. Katso lisätietoja aiheesta Merkkijonooperaattorit.

Merkkijonojen muokkaamiseen on monia hyödyllisiä toimintoja.

Tärkeimmät funktiot on kuvattu osiossa merkkijonofunktiot, säännölliset lausekkeet tarkennetun haun ja korvauksen funktiot (kahdessa osassa: Perl ja POSIX laajennettu).

On myös toimintoja URL-merkkijonoille ja toimintoja merkkijonojen salaukseen/salauksen purkamiseen (mcrypt ja mhash).

Lopuksi, jos et vieläkään ole löytänyt etsimääsi, katso myös merkkityyppifunktiot.

Muunna merkkijonoksi

Voit muuntaa arvon merkkijonoksi käyttämällä cast (string) tai strval()-funktiota. Lausekkeissa, joissa tarvitaan merkkijono, muunnos tapahtuu automaattisesti. Tämä tapahtuu, kun käytät echo()- tai print()-funktioita tai kun vertaat muuttujan arvoa merkkijonoon. Käsikirjan tyypit ja tyyppien käsittely -osien lukeminen selventää seuraavaa. Katso myös settype() .

Boolen arvo TOSI muunnetaan merkkijonoksi "1" ja arvo FALSE esitetään muodossa "" (tyhjä merkkijono). Tällä tavalla voit muuntaa arvoja molempiin suuntiin - boolean-tyypistä merkkijonotyyppiin ja päinvastoin.

Kokonaisluku (kokonaisluku) tai liukuluku (float) muunnetaan merkkijonoksi, jota edustaa sen numeroista koostuva luku (mukaan lukien liukulukujen eksponentti).

Taulukot muunnetaan aina merkkijonoksi "Array", joten et voi näyttää taulukon sisältöä käyttämällä echo()- tai print()-komentoa saadaksesi selville, mitä se sisältää. Jos haluat tarkastella yksittäistä elementtiä, sinun on tehtävä jotain, kuten echo $arr["foo"]. Katso alta vinkkejä kaiken sisällön näyttämiseen/katsomiseen.

Objektit muunnetaan aina merkkijonoksi "Objekti". Jos haluat tulostaa objektin jäsenmuuttujan arvon virheenkorjausta varten, lue seuraavat kappaleet. Jos haluat saada vaaditun objektin luokan nimen, käytä get_class() -funktiota.

Resurssit muunnetaan aina merkkijonoiksi, joiden rakenne on "Resurssitunnus #1", jossa 1 on PHP:n sille ajon aikana antama yksilöllinen resurssinumero. Jos haluat saada resurssityypin, käytä .

NULL muunnetaan aina tyhjäksi merkkijonoksi.

Kuten yllä näet, taulukoiden, objektien tai resurssien tulostaminen ei anna sinulle mitään hyödyllistä tietoa itse arvoista. Sopivampi tapa tulostaa arvoja virheenkorjausta varten on käyttää print_r()- ja var_dump()-funktioita.

Voit myös muuntaa PHP-arvot merkkijonoiksi jatkuvaa tallennusta varten. Tätä menetelmää kutsutaan serialisoinniksi ja se voidaan tehdä serialize()-funktiolla. Lisäksi, jos PHP-asennuksessasi on WDDX-tuki, voit sarjoittaa PHP-arvot XML-rakenteiksi.

Merkkijonojen muuntaminen numeroiksi

Jos merkkijono tunnistetaan numeeriseksi arvoksi, tuloksena oleva arvo ja tyyppi määritetään alla olevan kuvan mukaisesti.

Merkkijono tunnistetaan floatiksi, jos se sisältää jonkin seuraavista merkeistä ".", "e" tai "E". Muussa tapauksessa se määritellään kokonaislukuna.

Arvo määräytyy merkkijonon alkuosan mukaan. Jos merkkijono alkaa kelvollisella numeerisella arvolla, sitä arvoa käytetään. Muussa tapauksessa arvo on 0 (nolla). Kelvollinen numeerinen arvo on yksi tai useampi numero (joka voi sisältää desimaalipisteen), jota edeltää valinnaisesti etumerkki, jota seuraa valinnainen eksponentti. Eksponentti on "e" tai "E", jota seuraa yksi tai useampi numero.

$foo = 1 + "10,5"; // $foo on kelluva (11.5) $foo = 1 + "-1.3e3"; // $foo on kelluva (-1299) $foo = 1 + "bob-1.3e3"; // $foo on kokonaisluku (1) $foo = 1 + "bob3"; // $foo on kokonaisluku (1) $foo = 1 + "10 pientä porsasta"; // $foo on kokonaisluku (11) $foo = 4 + "10.2 Little Piggies"; // $foo on kelluva (14.2) $foo = "10.0 porsasta" + 1; // $foo on kelluva (11) $foo = "10.0 porsasta" + 1.0; // $foo on kelluva (11)

Katso Unix-dokumentaation strtod(3)-osiosta lisätietoja tästä muunnoksesta.

Jos haluat testata mitä tahansa tämän osan esimerkeistä, voit kopioida ja liittää sen sekä seuraavan rivin nähdäksesi mitä tapahtuu:

Echo "\$foo==$foo; kirjoita: " . gettype($foo) . "
\n";

Älä odota saavasi merkkikoodia muuntamalla sen kokonaisluvuksi (kuten voit tehdä esimerkiksi C:ssä). Jos haluat muuntaa merkit niiden koodeiksi ja takaisin, käytä ord() ja




Ylös