Tuplalainausmerkit php:ssä. Mitä eroa on yksi- ja kaksilainausmerkkien välillä PHP:ssä? Php pakottavat lainaukset

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

Yksittäiset lainausmerkit (heittomerkit) PHP:ssä

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

// Oikea kaiku "Kuinka on elämä?"; echo "Kuinka elämä on? $nimi"; echo "Kuinka elämä?".$name; // Virheellinen kaiku "Kuinka voit? $nimi";

Erikoismerkit kerta- ja lainausmerkeissä

Varmistaaksesi, että esimerkiksi sarkainmerkki (\t) tulkitaan sarkainmerkiksi eikä vinoviivaksi ja kirjaimeksi t, sinun on sisällytettävä sarkainmerkin sisältävä tekstirivi lainausmerkkeihin. Voit käyttää \' ja \\ vain yksittäisissä lainausmerkeissä. Kaikki muut poistosekvenssit (\n, \r, \$ jne.) eivät ole sallittuja lainausmerkeissä.

// Virheellinen kaiku "Kuinka voit?\n"; // Oikea kaiku "Kuinka voit?\n";

Voit välttää kaksoislainausmerkit merkkijonossa asettamalla lainausmerkit kenoviivan eteen \" .

// Väärä kaiku "

Miten menee?

"; // Oikea kaiku"

Miten menee?

"; kaiku"

Miten menee?

";

Tuplalainausmerkit PHP:ssä

Lainausmerkeissä olevaa tekstiä käsitellään hyvin 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ä minun tulee käyttää merkkijonojen muotoiluun - heittomerkkejä vai klassisia kaksoislainausmerkkejä?

Tarkastellaan eroa kaksois- ja kertalainausmerkkien välillä PHP:ssä ja käytä esimerkkejä selvittääksesi, 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ä olevia merkkijonoja paljon nopeammin kuin samanlaisia ​​lainausmerkeillä ympäröityjä merkkijonoja.

Syy tähän on yksinkertainen: PHP-tulkki tarkistaa lisäksi lainausmerkeissä olevat merkkijonot muuttujien esiintymisen varalta, ja jos niitä löytyy, muuttujan nimen sijaan sen arvo lisätään merkkijonoon. Mutta heittomerkkien sisällä olevan rivin tulkki havaitsee tavalliseksi tekstiksi, eikä PHP tee näille riveille mitään muunnoksia. Mielestäni on selvää, että merkkijonojen käsittely yksittäisissä lainausmerkeissä on joka tapauksessa nopeampaa.

Ensin kuvataan, kuinka merkkijono määritellään, ja sitten tarkistetaan, kuinka paljon nopeammin yksittäisten lainausmerkkien merkkijonojen käsittely on.

Yksinkertaisin tapa määritellä merkkijono on sulkea se lainausmerkkeihin ("). Jos haluat käyttää yksittäisiä lainausmerkkejä kertalainausmerkkijonon sisällä, niitä edeltää kenoviiva (\), eli erotusmerkki. Jos kenoviiva on tultava ennen yksittäistä lainausta tai olla rivin 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ä:
// Tulostus: Yksinkertainen merkkijono
kaiku "Yksinkertainen merkkijono";
// Prints: Olen täällä
echo "Olen täällä";
// Tulostus: Tämä ei lisää: \n uutta riviä
echo "Tämä ei lisää:\nuusi rivi";
// Lähdöt: $example-muuttujaa ei myöskään korvata
echo "Muuttujaa $esimerkki ei myöskään korvata"; Jos merkkijono on lainausmerkkien (") sisällä, PHP tunnistaa enemmän erotussarjoja erikoismerkeille ja myös korvaa muuttujan nimen arvon merkkijonossa. Kuten yksittäisten lainausmerkkien kohdalla, jotta kaksoislainausmerkkejä käytetään kaksoismerkkien sisällä lainausmerkit, niitä edeltää kenoviiva (\).

Tässä on esimerkki lainausmerkkien käytöstä:
// Tulostus: Yksinkertainen merkkijono
kaiku "Yksinkertainen merkkijono";
// Tulokset: Yritys "Snowdrop"
echo "Yritys \"Snowdrop\"";
// Tulostus: Tämä johtaa uuteen riviin
echo "Tämä katkeaa uudelle riville \n";
// Tulostus: Muuttuja korvataan
$esimerkki = "korvataan";
echo "Muuttuja $esimerkki"; Muista myös, että sekvenssi "\n" (uusirivi), "\r" (rivinvaihto) on tarkoitettu vain tekstille, ei HTML:lle. Joten et näe muutoksia selaimessa (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 silmukka miljoonalle iteraatiolle
for ($i = 0; $i< 1000000; $i++) {
$text = "Tässä on merkkijono";
}
// Laske käytetty aika
$aika = (mikroaika(tosi) - $aloitus); Tulos: 0,09 sekuntia.

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

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

Ero on varsin huomattava. Kytkentä ja lainausmerkit vaikuttavat selvästi suorituskykyyn, kun muuttujia lisätään merkkijonoon.

Kun palvelin käsittelee koodin, se tarkistaa koko lainausmerkkien sisällön muuttujien, vakioiden ja muiden varalta. Se vie aikaa. Ja palvelin käsittelee yksittäisten lainausmerkkien välissä olevan valmiiksi tekstiksi eikä välitä mitä siellä on. Ero kerta- ja kaksoislainausmerkkien suorituskyvyn välillä on hyvin pieni, mutta jos olet kehittämässä erittäin kuormitettua projektia, muutama millisekunnin säästö 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ä mahdollisia on tasan 256 eri merkkiä. Tämä tarkoittaa myös sitä, että PHP:llä ei ole alkuperäistä Unicode-tukea. Toiminnot tarjoavat jonkin verran Unicode-tukea utf8_encode() Ja utf8_decode() .

Merkkijonoa voidaan helposti käsitellä vakiotoimintojen avulla, ja voit myös käyttää suoraan sen kaikkia merkkejä.

Yksinkertainen esimerkki merkkijonomuuttujasta:

$a= "Se on vain tekstiä, joka on tallennettu merkkijonomuuttujaan";
echo $a ; //Tulostaa "Tämä on vain merkkijonomuuttujaan kirjoitettua tekstiä"
?>

Tarkastellaan nyt tietotyypin syntaksia yksityiskohtaisesti. merkkijono.

Merkkijonotyypin syntaksi

Merkkijono voidaan määritellä kolmella eri tavalla.

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 seuloa se. Jos kenoviivan on oltava ennen yhtä lainausta tai rivin lopussa, sinun on kopioitava se. Huomaa, että jos yrität paeta muita merkkiä, myös kenoviiva tulostetaan! Joten itse kenoviivaa ei yleensä tarvitse paeta.

Toisin kuin kaksi muuta syntaksia, muuttujat ja erotussekvenssit erikoismerkeille, jotka esiintyvät merkkijonojen sisällä, Ei käsitellään.

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

kaiku "tämä on yksinkertainen merkkijono";

Kaiku "Voit myös lisätä riveihin
rivin uusi merkki siis,
koska se on normaalia"
;

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

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

// Lähdöt: Poistitko C:\*.*?
echo "Poistitko C:\*.*?" ;

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

// Tulokset: $expand ja $joko muuttujia ei korvata
kaiku "$expand ja $joko muuttujaa ei korvata";
?>

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

Ohjausjärjestystaulukko:

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, oktaalilukujärjestelmän merkkiä
\x(1,2) säännöllistä lauseketta vastaava merkkijono, merkki heksadesimaalilukujärjestelmässä

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

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

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

Huomio! On erittäin tärkeää huomata, että sulkeva tunnusrivi ei sisällä muita merkkejä, paitsi ehkä puolipiste ( ; ). Tämä tarkoittaa, että 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", sulkevan tunnisteen katsotaan puuttuvan ja PHP jatkaa sen etsimistä. Jos oikeaa sulkevaa tunnistetta ei tässä tapauksessa löydy, se aiheuttaa virheen käsittelyssä skriptin lopussa olevan rivinumeron kanssa.

Heredoc-teksti toimii samalla tavalla kuin merkkijono lainausmerkeissä ilman niitä. Tämä tarkoittaa, että sinun ei tarvitse jättää lainausmerkkejä heredocissa, mutta voit silti käyttää yllä olevia pakotussarjoja. Muuttujat käsitellään, mutta sinun on oltava yhtä varovainen käytettäessä monimutkaisia ​​muuttujia heredocissa kuin työskennellessäsi merkkijonojen kanssa.

Esimerkki heredoc-merkkijonon määrittämisestä:

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

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

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

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

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

En ole PHP-ohjelmoinnin asiantuntija, mutta olen hieman hämmentynyt, miksi näen PHP:ssä koodia, jonka merkkijono on suljettu kerta- ja joskus lainausmerkkeihin.

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 = "minun $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 on

Echo "nimeni";

nopeammin kuin

Echo "nimeni";

Kaiku "minun". $a;

hitaampi kuin

Echo "minun $a";

Tämä pätee muihin käytettyihin 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ä yksittäisten lainausmerkkien sijaan.

Merkkijono on joukko merkkejä. PHP:ssä merkki on sama kuin tavu, mikä tarkoittaa, että mahdollisia on tasan 256 eri merkkiä. 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ä merkkijonon sisällä, kuten monissa muissa kielissä, sitä edeltää kenoviiva (\), eli sen on oltava ohitettu. Jos kenoviivan on oltava ennen yhtä lainausta tai rivin lopussa, sinun on kopioitava se. Huomaa, että jos yrität paeta muita merkkiä, myös kenoviiva tulostetaan! Joten itse kenoviivaa ei yleensä tarvitse paeta.

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

Huomautus: Toisin kuin kahdessa muussa syntaksissa, yksittäisissä lainausmerkeissä esiintyvien erikoismerkkien muuttujia ja erotussarjoja ei käsitellä.

Echo "tämä on yksinkertainen merkkijono"; echo "Voit myös lisätä rivinvaihdon merkkijonoihin tällä tavalla, kuten se on normaalia"; // Lähdöt: Arnold sanoi kerran: "I"ll be back" echo "Arnold sanoi kerran: "I\"ll be back""; // Lähdöt: Poistitko C:\*.*? echo "Poistitko C:\\*.*?"; // Lähdöt: Poistitko C:\*.*? echo "Poistitko C:\*.*?"; // Lähdöt: Tämä ei lisää: \n uusi rivi echo "Tämä ei lisää: \n uutta riviä"; // Tulokset: $expand ja $joko muuttujia ei korvata echo "$expand ja $joko muuttujaa ei korvata";

Tuplalainausmerkit

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

Taulukko 11-1. Pakojaksot

Toistamme, että jos haluat muistella minkä tahansa muun merkin, kenoviiva tulostetaan myös!

Mutta kaksilainausmerkkisten merkkijonojen tärkein ominaisuus on muuttujien käsittely. Katso lisätietoja: merkkijonojen käsittely.

Heredoc

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

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

Huomio

On erittäin tärkeää huomata, että sulkeva tunnisterivi ei sisällä muita merkkejä, paitsi mahdollisesti puolipiste (;). 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", sulkevan tunnisteen katsotaan puuttuvan ja PHP jatkaa sen etsimistä. Jos oikeaa sulkevaa tunnistetta ei tässä tapauksessa löydy, se aiheuttaa virheen käsittelyssä skriptin lopussa olevan rivinumeron kanssa.

Heredoc-teksti toimii samalla tavalla kuin merkkijono lainausmerkeissä ilman niitä. Tämä tarkoittaa, että sinun ei tarvitse jättää lainausmerkkejä heredocissa, mutta voit silti käyttää yllä olevia pakotussarjoja. Muuttujat käsitellään, mutta sinun on oltava yhtä varovainen käytettäessä monimutkaisia ​​muuttujia heredocissa kuin työskennellessäsi merkkijonojen kanssa.

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 iso kirjain "A": \x41 EOT;

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

Muuttujien käsittely

Jos merkkijono on määritelty lainausmerkeissä tai käyttämällä heredocia, 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 tai objektin ominaisuutta.

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 nappaa niin monta merkkiä kuin mahdollista muodostaakseen kelvollisen muuttujan nimen. Jos haluat määrittää nimen lopun, kirjoita muuttujan nimi aaltosulkeisiin.

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

Matriisielementti (array) tai objektin (objektin) ominaisuus voidaan käsitellä samalla tavalla. Taulukkohakemistoissa sulkeva hakasulku (]) merkitsee indeksimäärityksen loppua. Objektin ominaisuuksiin pätevät samat säännöt kuin yksinkertaisiin muuttujiin, vaikka niitä ei voi huijata kuten muuttujien kanssa.

// Nämä esimerkit koskevat erityisesti taulukoiden käyttöä // merkkijonojen sisällä. Merkitse aina //-taulukon merkkijonoavaimet merkkijonojen ulkopuolella lainausmerkkeihin äläkä käytä merkkijonojen (sulujen) 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"]."; // Teokset kaikuvat "Banaani on" . $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ää minkä tahansa nimiavaruudessa olevan arvon riville tällä syntaksilla. Kirjoitat lausekkeen samalla tavalla kuin rivin ulkopuolelle ja kirjoitat sen sitten ( ja ) -merkkeihin. Koska et voi välttää merkkiä "(", tämä syntaksi tunnistetaan vain, kun $ seuraa välittömästi (. (Käytä "(\$" tai "\($") pakottaaksesi "($").).). 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 virheellinen samasta syystä kuin $foo on virheellinen rivin // ulkopuolella. Toisin sanoen tämä toimii edelleen, // mutta koska PHP etsii ensin vakiota foo, se // antaa E_NOTICE (määrittämätön vakio) -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 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 samoihin tarkoituksiin. Tämä syntaksi on kuitenkin vanhentunut PHP 4:stä alkaen.

Esimerkki 11-3. Muutama esimerkki merkkijonoista

// 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 rivin viimeistä merkkiä $str = "Katso merta"; $str(strlen($str)-1) = "I";

Hyödylliset toiminnot ja operaattorit

Merkkijonot voidaan ketjuttaa käyttämällä "."-operaattoria. (piste). Huomaa, että lisäysoperaattori "+" ei toimi tässä. Lisätietoja on kohdassa 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 Advanced).

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 vaaditaan 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 Tyyppikäsittely -osioiden 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 - Boolen arvosta merkkijonoksi ja päinvastoin.

Kokonaisluku tai 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öä komennolla echo() tai print() nähdäksesi, 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äkyy, taulukoiden, objektien tai resurssien tulostaminen ei anna sinulle mitään hyödyllistä tietoa itse arvoista. Parempi 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ä käyttämällä serialize()-funktiota. 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 seuraavasti.

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 alun perusteella. Jos rivi 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ää desimaalipilkun), 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 float (11) $foo = "10.0 porsasta" + 1.0; // $foo on kelluva (11)

Lisätietoja tästä muunnoksesta on Unix-dokumentaation strtod(3)-osiossa.

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 merkin koodia muuntamalla sen kokonaisluvuksi (kuten voit tehdä esimerkiksi C:ssä). Jos haluat muuntaa merkit niiden koodeiksi ja takaisin, käytä ord() ja




Yläosa