Ero kaksois- ja kertalainausmerkkien välillä PHP:ssä. Mitä eroa on yksi- ja kaksilainausmerkkien välillä PHP:ssä? Php lainausmerkit lainausmerkeissä

Kotiin / Laitteen asennus

Kommentti: PHP 7.0.0:ssa 64-bittisissä alustoissa ei ole saavutettavissa olevia rajoituksia 32-bittisissä järjestelmissä, ja PHP:n aiemmissa versioissa rivit eivät voi olla suurempia kuin 2 Gt (2147483647 tavua).

Syntaksi

Merkkijono voidaan määritellä neljällä eri tavoin:

  • yksittäisiä lainauksia
  • kaksoislainausmerkit
  • nowdoc-syntaksi (PHP 5.3.0:sta lähtien)

Yksittäiset lainaukset

Yksinkertaisin tapa merkkijonon määrittäminen merkitsee sen sulkemista lainausmerkkeihin (merkki " ).

Jos haluat käyttää yhtä lainausta merkkijonon sisällä, poista se kenoviivalla ( \ ). Jos sinun on kirjoitettava kenoviiva itse, kopioi se ( \\ ). Kaikki muut kenoviivan käyttötavat tulkitaan normaaleina merkeinä: tämä tarkoittaa, että jos yrität käyttää muita estosarjoja, kuten esim. \r tai \n, ne tulostetaan sellaisenaan minkään erityisen käyttäytymisen sijaan.

kaiku "tämä on yksinkertainen merkkijono";

kaiku "Voit myös lisätä riveihin
rivinvaihtohahmo kuten tämä,
Tämä on hyvä"
;

// Tulokset: 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:\*.*?" ;

// Lähdöt: Tätä ei laajenneta: \n rivinvaihto
kaiku "Tätä ei laajenneta: \n uusi rivi";

// Tulokset: $expand ja $joko muuttujia ei laajenneta
kaiku "$expand ja $joko muuttujaa ei ole laajennettu";
?>

Tuplalainausmerkit

Jos merkkijono on lainausmerkkien (") sisällä, PHP tunnistaa seuraavat erikoismerkkien erotussekvenssit:

Pakojaksot
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)
\v pystyvälilehti (VT tai 0x0B (11) ASCII:ssa) (PHP 5.2.5:stä lähtien)
\e Escape-merkki (ESC tai 0x1B (27) ASCII:ssa) (PHP 5.4.4:stä lähtien)
\f sivusyöte (FF tai 0x0C(12) ASCII:ssa) (PHP 5.2.5:stä lähtien)
\\ kenoviiva
\$ dollarin merkki
\" kaksoislainaus
\{1,3} merkkijono, joka vastaa oktaalimerkin säännöllistä lauseketta, joka vuotaa äänettömästi yli mahtuakseen tavuun (eli "\400" === "\000")
\x(1,2) merkkijono, joka vastaa merkin säännöllistä lauseketta heksadesimaalimuodossa
\u(+) merkkijono, joka vastaa Unicode-merkkien säännöllistä lauseketta, joka kartoitetaan UTF-8-esityksen merkkijonoon (lisätty PHP 7.0.0:aan)

Kuten yksittäisiin lainausmerkkeihin suljetun merkkijonon kohdalla, minkä tahansa merkin poisto tulostaa myös itse poistomerkin. Ennen PHP 5.1.1:tä kenoviiva sisään \($var) ei julkaistu.

Heredoc

Kolmas tapa määrittää merkkijonoja on käyttää heredoc-syntaksia: <<< . Tämän operaattorin jälkeen sinun on määritettävä tunniste ja sitten rivinvaihto. Tämän jälkeen tulee itse rivi ja sitten sama tunniste, joka sulkee lisäyksen.

Linja pitäisi aloita sulkevalla tunnisteella, ts. sen tulee näkyä rivin ensimmäisessä sarakkeessa. Lisäksi tunnisteen on noudatettava samoja nimeämissääntöjä kuin kaikkien muiden PHP-tunnisteiden: sisältää vain aakkosnumeerisia merkkejä ja alaviivaa, eikä se saa alkaa numerolla (alaviivat ovat sallittuja).

Huomio

On erittäin tärkeää huomata, että päättävä tunnusrivi ei saa sisältää muita merkkejä kuin puolipiste ( ; ). Tämä tarkoittaa, että id ei saa olla sisennystä 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 UNIX-järjestelmissä, mukaan lukien macOS, tämä on \n. Uuden rivin tulee myös alkaa välittömästi sulkevan tunnuksen jälkeen.

Jos tätä sääntöä rikotaan ja sulkeva tunniste ei ole "puhdas", oletetaan, että sulkeva tunniste puuttuu ja PHP jatkaa sen etsimistä. Jos tässä tapauksessa oikeaa sulkevaa tunnistetta ei löydy, se aiheuttaa jäsennysvirheen komentosarjan lopussa olevan rivinumeron kanssa.

Esimerkki #1 Esimerkki virheellisestä syntaksista

luokka foo (
julkinen $bar =<<baari
EOT;
// sisennys ennen sulkevaa tunnistetta ei ole sallittu
}
?>

Esimerkki #2 Esimerkki oikeasta syntaksista

luokka foo (
julkinen $bar =<<baari
EOT;
}
?>

Heredocia ei voi käyttää luokkakenttien alustamiseen.

Heredoc-teksti toimii samalla tavalla kuin merkkijono lainausmerkeissä 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 heredocissa kuin työskennellessäsi merkkijonojen kanssa.<<Esimerkki #3 Heredoc-merkkijonomäärittelyesimerkki
$str =
Esimerkkilinja,
kattaa useita rivejä,

käyttämällä heredoc-syntaksia.
{
EOD;
Luokka foo

var $foo ;
{
var $bar ;
Function__construct()
}
}

$this -> foo = "Foo" ;
$tämä ->

$foo = uusi foo();<<$name = "Nimi" ; .
kaiku
Nimeni on "$nimi". Kirjoitan $foo -> foo .
Nyt päättelen
EOT;
?>

($foo -> baari [ 1 ])

Tämän pitäisi tulostaa iso kirjain "A": \x41

Nimeni on "Nimi". Kirjoitan Foo. Nyt tuon Bar2:n. Tämän pitäisi tulostaa iso kirjain "A": A

On myös mahdollista käyttää heredoc-syntaksia tietojen välittämiseen funktioargumenttien kautta:

Versiosta 5.3.0 lähtien staattisten muuttujien ja luokan ominaisuuksien/vakioiden alustaminen on tullut mahdolliseksi heredoc-syntaksin avulla:
Esimerkki #5 Heredocin käyttäminen staattisten muuttujien alustamiseen
{
// Staattiset muuttujat<<funktio foo()
staattinen $bar =
}

Täällä ei ole mitään...
LABEL;
{
// Vakiot/luokkaominaisuudet<<luokka foo
const BAR =

Esimerkki vakion käytöstä<<FOOBAR;
const BAR =
}
?>

Julkinen $baz =

Esimerkki kentän käytöstä

PHP 5.3.0:sta lähtien Heredoc-tunnisteen voi myös ympäröidä lainausmerkeillä: Nytdoc Nowdoc on sama kertalainausmerkkijonoille kuin heredoc kaksoislainausmerkkijonoille. Nowdoc on samanlainen kuin heredoc, mutta sen sisällä vaihtoja ei tehdä

. Tämä muotoilu on ihanteellinen PHP-koodin tai muiden suurten tekstilohkojen upottamiseen ilman, että sitä tarvitsee paeta. Tässä se on vähän samanlainen kuin SGML-rakenne <<< ilmoittamalla tekstilohkon, jota ei ole tarkoitus käsitellä. <<<"EOT" Nowdoc on merkitty samalla järjestyksellä

, jota käytetään tässä asiakirjassa, mutta seuraava tunniste on esimerkiksi lainausmerkeissä,

$foo = uusi foo();<<<"EOD"
.
Kaikki heredoc-tunnisteita koskevat ehdot koskevat myös nowdocia, erityisesti ne, jotka koskevat sulkevaa tunnistetta.
Esimerkki #7 Esimerkki nowdocin käytöstä
Esimerkkiteksti,
kattaa useita rivejä

käyttämällä nowdoc-syntaksia. Kenoviivaa käsitellään aina kirjaimellisesti,

Esimerkki tekstistä, joka kattaa useita rivejä nowdoc-syntaksilla. Kenoviivaa käsitellään aina kirjaimellisesti, kuten \\ ja \".

Esimerkki #8 Nowdoc-merkkijono, joka lainaa esimerkkiä muuttujilla

/* Monimutkaisempi esimerkki muuttujilla. */
LABEL;
{
julkinen $foo ;
julkinen $bar ;

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

$this -> foo = "Foo" ;
$tämä ->

$foo = uusi foo();<<<"EOT"
Nimeni on "$nimi". Tulostan $foo->foo.
Nyt tulostan ($foo->bar).
Tämän ei pitäisi tulostaa isoa kirjainta "A": \x41
EOT;
?>

käyttämällä nowdoc-syntaksia. Kenoviivaa käsitellään aina kirjaimellisesti,

Nimeni on "$nimi". Tulostan $foo->foo. Nyt tulostan ($foo->bar). Tämän ei pitäisi tulostaa isoa kirjainta "A": \x41

Esimerkki #9 Esimerkki staattisen tiedon käyttämisestä

luokka foo (
julkinen $bar =<<<"EOT"
baari
EOT;
}
?>

Kommentti:

nowdoc-tuki lisättiin PHP 5.3.0:aan.

Muuttujien käsittely

Jos merkkijono on määritetty 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ää. Se mahdollistaa muuttujan, taulukon arvon ( joukko ) tai kohteen ominaisuuksia ( esine

) vähällä vaivalla.

Monimutkainen syntaksi voidaan tunnistaa lauseketta ympäröivistä aaltosulkeista.

Yksinkertainen syntaksi $ Jos tulkki kohtaa dollarin merkin (

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

$mehu = "omena" ;

echo "Hän joi $mehumehua." . PHP_EOL ;
// Väärin. "s" on kelvollinen merkki muuttujan nimelle, mutta muuttujan nimi on $juice.

echo "Hän joi mehua, joka oli valmistettu $mehuista." ;
// Oikein. Muuttujan nimen loppu ilmoitetaan tarkasti suluissa:
?>

käyttämällä nowdoc-syntaksia. Kenoviivaa käsitellään aina kirjaimellisesti,

echo "Hän joi mehua, joka oli tehty $( mehu ) s." ;

Hän joi omenamehua. Hän joi mehua, joka oli valmistettu . Hän joi omenoista valmistettua mehua. Yksinkertainen syntaksi on helpompaa ja kätevämpää. Se mahdollistaa muuttujan, taulukon arvon ( Joukkoelementti ( ) tai kohteen ominaisuuksia () tai esineen omaisuutta ( ] ). Matriisin indekseissä on sulkeva hakasulke (

) merkitsee indeksin määritelmän loppua. Objektin ominaisuuksiin sovelletaan samat säännöt kuin yksinkertaisiin muuttujiin.

Esimerkki #10 Yksinkertainen syntaksiesimerkki
define ("KOOLAID" , "koolaid1" );

$mehut = array("omena" , "oranssi" , "koolaid1" => "violetti" );
echo "Hän joi $mehut [ 0 ] mehua." . PHP_EOL ;
echo "Hän joi $mehua [ 1 ] mehua." . PHP_EOL ;

echo "Hän joi $mehuja [ koolaid1 ] mehua." . PHP_EOL ;
luokan ihmiset (
julkinen $john = "John Smith" ;
julkinen $jane = "Jane Smith" ;

julkinen $robert = "Robert Paulsen" ;
}

Julkinen $smith = "Smith" ;

echo "$people -> john joi $mehut [ 0 ] mehua." . PHP_EOL ;
echo " $people -> john sanoi sitten hei $peoplelle -> jane ." . PHP_EOL ;
echo "$people -> Johnin vaimo tervehti $peoplea -> robert." . PHP_EOL;
echo " $people -> robert tervehti kahta $ihmästä -> sepät." ; // Ei onnistu
?>

käyttämällä nowdoc-syntaksia. Kenoviivaa käsitellään aina kirjaimellisesti,

Hän joi omenamehua. Hän joi appelsiinimehua. Hän joi violettia mehua. John Smith joi omenamehua. John Smith tervehti sitten Jane Smithiä. John Smithin vaimo tervehti Robert Paulsenia.

PHP 7.1.0 lisätty tuki negatiivinen numeeriset indeksit.

Esimerkki #11 Negatiiviset numeeriset indeksit

$string = "merkkijono" ;
kaiku "Indeksin -2 merkki on yhtä suuri kuin$merkkijono [- 2 ]." , PHP_EOL ;
$merkkijono [- 3 ] = "o" ;
kaiku "Merkin muuttaminen sijainnissa -3 o:ksi tuottaa seuraavan rivin:$merkkijono." , PHP_EOL;
?>

käyttämällä nowdoc-syntaksia. Kenoviivaa käsitellään aina kirjaimellisesti,

Merkki, jonka indeksi on -2, on yhtä suuri kuin n. Vaihtamalla merkin kohdassa -3 "o":ksi saadaan seuraava rivi: vahva

Jos kyseessä on monimutkaisempi, käytä 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.

Mikä tahansa merkkijonoon kartoitettu skalaarimuuttuja, taulukkoelementti tai objektiominaisuus voidaan esittää merkkijonossa tätä syntaksia käyttämällä. Kirjoita lauseke samalla tavalla kuin rivin ulkopuolelle ja kääri se sitten sisään { Ja } . Koska { ei voida välttää, tämä syntaksi tunnistetaan vain, kun $ seuraa suoraan { . Käyttää {\$ tulostaa {$ .

Muutama havainnollistava esimerkki:
// Näytä kaikki virheet

virhe_raportointi(E_ALL);

$hieno = "hieno" ;
// Ei toimi, tulosteet: Tämä on (hieno)

echo "Tämä on ( $hieno )" ;
// Toimii, tulosta: Tämä on hienoa

echo "Tämä on ( $hieno )" ;
kaiku // Toimii"Tämä aukio on leveä

( $neliö -> leveys ) 00 senttimetriä." ;
// Toimii, lainatut avainsanat toimivat vain aaltosulkeiden syntaksilla

echo "Tämä on ( $hieno )" ;
echo "Tämä toimii: ( $arr [ "avain" ]) " ;

echo "Tämä toimii: ( $arr [ 4 ][ 3 ]) " ;
// Tämä on virheellinen samasta syystä kuin $foo ulkopuolella
// rivit. Toisin sanoen se toimii edelleen,
// mutta koska PHP etsii vakio foo ensin, tämä aiheuttaa
kaiku // tasovirhe E_NOTICE (määrittämätön vakio)."Tämä on väärin:

( $arr [ foo ][ 3 ]) " ;
// Toimii. Käytettäessä moniulotteisia taulukoita sisäisesti
// rivit käyttävät aina kiharoja aaltosulkeet

echo "Tämä toimii: ( $arr [ "foo" ][ 3 ]) " ;
// Toimii.

kaiku echo "Tämä toimii: " . $arr [ "foo" ][ 3 ];( $obj -> arvot [ 3 ]-> nimi ) " ;

kaiku "Tämä on nimetyn muuttujan arvo$nimi : ($( $nimi )) " ;

kaiku "Tämä on muuttujan nimen arvo, jonka getName() palauttaa:($( getName ())) " ;

kaiku "Tämä on muuttujan nimen arvo, jonka \$object->getName() palauttaa:($( $object -> getName ())) " ;

// Ei toimi, tulostaa: Tämän getName() palauttaa: (getName())
kaiku "Tämän getName() palauttaa: (getName())";
?>

Tämän syntaksin avulla on myös mahdollista päästä käsiksi merkkijonojen objektien ominaisuuksiin.

luokka foo (
var $bar = "Olen baari." ;
}

$this -> foo = "Foo" ;
$bar = "bar" ;
$baz = array("foo" , "bar" , "baz" , "quux" );
echo " ( $foo -> $bar ) \n" ;
echo " ( $foo ->( $baz [ 1 ])) \n" ;
?>

käyttämällä nowdoc-syntaksia. Kenoviivaa käsitellään aina kirjaimellisesti,

Olen baari. Olen baari.

Kommentti:

Funktiot, menetelmäkutsut, staattiset luokkamuuttujat ja luokkavakiot toimivat sisäisesti {$} , alkaen PHP 5:stä. Annettua arvoa käsitellään kuitenkin muuttujan nimenä samassa yhteydessä kuin riviä, jossa se on määritelty. Yksittäisten kiharoiden olkaimet ( {} ) ei toimi funktioiden, menetelmien, luokkavakioiden tai staattisten luokkamuuttujien arvojen käyttämiseen.

Muutama havainnollistava esimerkki:
// Näytä kaikki virheet

luokan oluet (
const virvoitusjuoma = "juuriolut" ;
julkinen staattinen $ale = "ipa" ;
}

$rootbeer = "A & W" ;
$ipa = "Alexander Keith\"s" ;

// Tämä toimii, tulostaa: Haluaisin A & W
echo "Haluaisin ($( oluet :: virvoitusjuoma )) \n" ;

// Tämäkin toimii, tulostaa: Haluaisin Alexander Keithin
echo "Haluaisin ($( beers :: $ale )) \n" ;
?>

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, hakasulkeissa merkkijonon jälkeen, esimerkiksi $str . Ajattele tätä tarkoitusta varten olevaa merkkijonoa merkkijonona. Ja Jos sinun on hankittava tai korvattava enemmän kuin yksi merkki, voit käyttää toimintoja.

Kommentti: substr() substr_replace() PHP 7.1.0:sta lähtien negatiivisia offset-arvoja tuetaan. Ne määrittävät siirtymän rivin lopusta. Aiemmin negatiiviset poikkeamat aiheuttivat tasovirheen E_NOTICE

Kommentti: luettaessa (palauttaa tyhjä merkkijono) tai

Huomio

E_VAROITUS Ne määrittävät siirtymän rivin lopusta. Aiemmin negatiiviset poikkeamat aiheuttivat tasovirheen.

Huomio

Vain määritetyn merkkijonon ensimmäistä merkkiä käytetään.

Kommentti: PHP 7.1.0:sta lähtien tyhjän merkkijonon määrittäminen aiheuttaa vakavan virheen. Aikaisemmin tässä tapauksessa oli määritetty nollatavu (NULL).

PHP:n merkkijonot ovat sisäisesti tavuja. Tästä syystä merkkijonon käyttäminen tai muokkaaminen siirtymällä ei ole turvallista monitavuiselle koodaukselle, ja se tulisi tehdä vain yksitavuisissa koodauksissa, kuten ISO-8859-1, oleville merkkijonoille.

PHP 7.1.0:sta lähtien tyhjän indeksin käyttö aiheuttaa aiemmin vakavan virheen, tässä tapauksessa merkkijono muunnettiin taulukoksi ilman varoitusta.
Esimerkki #12 Joitakin esimerkkijonoja
// 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." ;
$last = $str [ strlen ($str ) - 1 ];
// Muuta rivin viimeistä merkkiä

?>

$str = "Katso merta" ; $str [ strlen ($str )- 1 ] = "e" ; PHP 5.4:stä lähtien merkkijonon siirtymä on määritettävä joko kokonaislukuna tai merkkijonona, joka sisältää numeroita, muuten annetaan varoitus. Aikaisemmin merkkijonon kaltainen offset 0 .

"foo"

, ilman varoitusta muutettiin muotoon

Esimerkki #13 Erot PHP 5.3:n ja PHP 5.4:n välillä
$str = "abc" ;

Var_dump($str["1"]);
var_dump (isset($str [ "1" ]));

Var_dump($str["1.0"]);
var_dump (isset($str [ "1.0" ]));

Var_dump($str["x"]);
var_dump (isset($str [ "x" ]));
?>

Var_dump($str["1x"]);

var_dump (isset($str [ "1x" ]));

Tämän esimerkin suorittamisen tulos PHP 5.3:ssa:

merkkijono(1) "b" bool(tosi) merkkijono(1) "b" bool(tosi) merkkijono(1) "a" bool(tosi) merkkijono(1) "b" bool(tosi)

Kommentti:

Tämän esimerkin suorittamisen tulos PHP 5.4:ssä: string(1) "b" bool(true) Varoitus: Illegal string offset "1.0" /tmp/t.php rivillä 7 string(1) "b" bool(false) Varoitus: Illegal string offset "x" in / tmp/t.php rivillä 9 string(1) "a" bool(false) string(1) "b" bool(false) {} Yritetään käyttää muun tyyppisiä muuttujia (lukuun ottamatta taulukoita tai objekteja, jotka toteuttavat tiettyjä rajapintoja) käyttämällä tai.

Kommentti:

palaa hiljaa NULL {} .

PHP 5.5 lisäsi tuen merkkijonoliteraaleissa olevien merkkien käyttämiseen syntaksin avulla

tai

Merkkijonojen muokkaamiseen on monia hyödyllisiä toimintoja.

Perusfunktiot on kuvattu merkkijonofunktioita käsittelevässä osiossa, ja tarkennetun haun ja korvaamisen osalta Perl-yhteensopivia säännöllisiä lausekefunktioita. Muunna merkkijonoksi Arvo voidaan muuntaa merkkijonoksi castin avulla strval(). kaiku string(1) "b" bool(true) Varoitus: Illegal string offset "1.0" /tmp/t.php rivillä 7 string(1) "b" bool(false) Varoitus: Illegal string offset "x" in / tmp/t.php rivillä 9 string(1) "a" bool(false) string(1) "b" bool(false) Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti. Tämä tapahtuu, kun käytät toimintoja painaa.

, tai kun muuttujan arvoa verrataan merkkijonoon. Käsikirjan Tyypit ja Tyyppikäsittely -osioiden lukeminen selventää seuraavaa. Katso myös settype() Taulukot muunnetaan aina merkkijonoksi Yksinkertainen syntaksi on helpompaa ja kätevämpää. Se mahdollistaa muuttujan, taulukon arvon ("Matriisi" kaiku NULL Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti., joten et voi näyttää taulukon sisältöä ( ), käyttämällä nähdäksesi mitä se sisältää. Jos haluat tarkastella yksittäistä elementtiä, käytä jotain tällaista

echo $arr["foo"] . Katso alta vinkkejä kaiken sisällön näyttämiseen/katsomiseen. Muuntaa tyyppimuuttujan "Esine" tyypiltään

merkkijono tai Käytetään taikamenetelmää __toString.

Merkitys muunnetaan aina tyhjäksi merkkijonoksi. Ja Kuten yllä näkyy, taulukoiden, objektien tai resurssien suora muuntaminen merkkijonoksi ei anna muuta hyödyllistä tietoa arvoista itsestään kuin niiden tyypeistä..

Parempi tapa tulostaa arvoja virheenkorjausta varten on käyttää funktioita print_r().

var_dump()

Useimmat PHP:n arvot voidaan muuntaa merkkijonoksi jatkuvaa tallennusta varten. Tätä menetelmää kutsutaan serialisoinniksi ja se voidaan tehdä funktiolla

serialize() Merkkijonojen muuntaminen numeroiksi Jos merkkijono tunnistetaan numeeriseksi arvoksi, tuloksena oleva arvo ja tyyppi määritetään seuraavasti. Jos merkkijono ei sisällä mitään merkkejä ".", "e" tai "E" ja luvun arvo on kokonaislukujen alueella (määritelty PHP_INT_MAX ), merkkijono tunnistetaan kokonaisluvuksi ().

kokonaisluku

). Kaikissa muissa tapauksissa sitä pidetään liukulukuna (
kellua 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)
?>

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

Jos haluat testata mitä tahansa tämän osan esimerkeistä, kopioi ja liitä se ja seuraava rivi nähdäksesi mitä tapahtuu:

echo "\$foo== $foo ; kirjoita: " . gettype ($foo) . "
\n" ;
?>

Älä odota saavasi merkin koodia muuntamalla se kokonaisluvuksi (kuten tehdään esimerkiksi C:ssä). Voit muuntaa merkit ASCII-koodeiksi ja takaisin käyttämällä toimintoja ord() Ja chr().

Merkkijonotyypin toteutustiedot

7 vuotta sitten

Dokumentaatiossa ei mainita, mutta sulkeva puolipiste heredocin lopussa tulkitaan itse asiassa oikeaksi puolipisteeksi ja sellaisenaan johtaa joskus syntaksivirheisiin.

$foo =<<abcd
END;
?>

Tämä ei:

foo (<<abcd
END;
);
// syntaksivirhe, odottamaton ";"
?>

Ilman puolipistettä toimii hyvin:

foo (<<abcd
LOPPU
);
?>

3 vuotta sitten

Voit käyttää merkkijonoa kuten merkkijonoa (kuten C)

$a = "Merkkijonotaulukkotesti";

var_dump($a);
// Palauttaa merkkijono(17) "String array testi"

var_dump($a);
// Palautusmerkkijono(1) "S"

// -- Array castilla --
var_dump((taulukko) $a);
// Palauttaa array(1) ( => string(17) "String array testi")

var_dump((taulukko) $a);
// Palautusmerkkijono(17) "S"

Norihiori

15 vuotta sitten

Voit käyttää monimutkaista syntaksia asettaaksesi sekä objektin ominaisuuksien että objektimenetelmien arvon merkkijonoon. Esimerkiksi...
luokkakoe(
julkinen $yksi = 1 ;
julkinen toiminto kaksi() (
paluu 2;
}
}
$testi = new Test();
echo "foo ( $test -> one ) bar ( $test -> two ())" ;
?>
Tulostaa "foo 1 bar 2".

Et kuitenkaan voi tehdä tätä kaikille nimiavaruuden arvoille. Luokkavakiot ja staattiset ominaisuudet/menetelmät eivät toimi, koska monimutkainen syntaksi etsii "$".
luokkakoe(
const YKSI = 1;
}
echo "foo (Testi::ONE) bar" ;
?>
Tämä tulostaa "foo (Test::one) bar". Vakiot ja staattiset ominaisuudet edellyttävät merkkijonon hajottamista.

3 vuotta sitten

Varo, että "Merkon merkkijonon muuntaminen numeroiksi" mukaisesti:

Jos ("123abc" == 123 ) kaiku "(intstr == int) testaa virheellisesti tosi.";

// Koska toinen puoli on numero, merkkijono muunnetaan väärin intstr:stä int:ksi, joka sitten vastaa testinumeroa.

// Totta kaikille ehdollisille, kuten if- ja switch-lauseille (luultavasti myös while-silmukaille)!

// Tämä voi olla valtava turvallisuusriski testattaessa/käytettäessä/tallennettaessa käyttäjän syötteitä, kun odotellaan ja testataan vain kokonaislukua.

// Näyttää siltä, ​​että ainoa korjaus on, että 123 on merkkijono "123", joten muuntamista ei tapahdu.

?>

6 vuotta sitten

Merkkijonojen etunollia ei käsitellä (vähintään yllätys) oktaaleina.
Harkitse:
$x = "0123" + 0;
$y = 0123 + 0;
echo "x on $x, y on $y"; //tulostaa "x on 123, y on 83"
toisin sanoen:
* lähdekoodin numeeristen literaalien etunollat ​​tulkitaan "oktaaliksi", vrt. strtol().
* merkkijonojen etunollia (esim. käyttäjän toimittamat tiedot), kun ne on siirretty (implisiittisesti tai eksplisiittisesti) kokonaislukuun, jätetään huomiotta ja niitä pidetään desimaalilukuina, ks. strtod().

10 vuotta sitten

Tässä on helppo hakkerointi, jonka avulla kaksoislainausmerkkijonot ja heredocs voivat sisältää mielivaltaisia ​​lausekkeita aaltosulkeissa, mukaan lukien vakiot ja muut funktiokutsut:

// Hakkerointiilmoitus
funktio _expr ($v ) (palauttaa $v ; )
$_expr = "_expr" ;

// Meidän leikkipaikka
define("qwe" , "asd");
määritellä("zxc", 5 );

$a= 3 ;
$b= 4 ;

toiminto c($a, $b) (paluu$a+ $b; }

//Käyttö
kaiku"ennen{ $_expr(1 + 2 )} postata\n"; // tulostaa "pre 3 post"
kaiku"ennen{ $_expr(qwe)} postata\n"; // tulostaa "pre asd post"
kaiku"ennen{ $_expr(c($a, $b)+ zxc* 2 )} postata\n"; // tulostaa "pre 17 post"

// Yleinen syntaksi on ($_expr(...))
?>

2 vuotta sitten

Ajattelin, että olisi hyödyllistä lisätä tämä kommentti, jotta tiedot näkyvät ainakin PHP-sivuston oikealla sivulla.

Huomaa, että jos aiot käyttää kaksoislainausmerkkiä assosiatiivisen avaimen kanssa, saatat törmätä T_ENCAPSED_AND_WHITESPACE-virheeseen. Jotkut pitävät tätä yhtenä vähemmän ilmeisistä virheilmoituksista.

Ilmaisu, kuten:

$hedelmä=array(
"a"=> "omena",
"b"=> "banaani",
//jne
);

Painaa "Tämä on a$hedelmä[ "a"]"; // T_ENCAPSED_AND_WHITESPACE
?>

hajoaa varmasti palasiksi.

Voit ratkaista sen seuraavasti:

Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti."Tämä on a$hedelmä[ a] " ; // Avaa lainaus
Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti."Tämä on a${ hedelmää[ "a"]} " ; // Monimutkainen syntaksi
Lausekkeissa, joissa vaaditaan merkkijono, muunnos tapahtuu automaattisesti."Tämä on a{ $hedelmä[ "a"]} " ; // Monimutkainen syntaksimuunnelma
?>

Pidän henkilökohtaisesti viimeistä muunnelmaa, koska se on luonnollisempi ja lähempänä sitä, miltä ilmaus olisi merkkijonon ulkopuolella.

Ei ole selvää (ainakin minulle), miksi PHP tulkitsee väärin lausekkeen sisällä olevan lainauksen, mutta luulen, että sillä on jotain tekemistä sen kanssa, että lainausmerkit eivät ole osa arvomerkkijonoa - kun merkkijono on jo jäsennetty, lainausmerkit vain tulla tielle...?

2 vuotta sitten

Molempien pitäisi toimia :(

luokkaaTestaus{
julkinen staattinen
$VAR= "staattinen";
julkinen const VAR =
"const";

Julkinen toiminta sano hei Static() {
kaiku
"Hei:{ $tämä:: $VAR} " ;
}

Julkinen toiminta sano HelloConst() {
kaiku
"Hei:{ $tämä::VAR)" ; //Jäsennysvirhe: syntaksivirhe, odottamaton ")", odotetaan "["
}
}

$obj= uusiTestaus();
$obj-> sano hei Static();
$obj-> sano HelloConst();

3 vuotta sitten

Jotain mitä olen kokenut, mikä epäilemättä auttaa jotakuta. . .
Editorissani tämä korostaa HTML:n ja $kommentin syntaksia:

$html =<<<"EOD"
$kommentti
kattaa useita rivejä,

Tämän käyttäminen näyttää kaikki saman värin:

$html =<<$kommentti
kattaa useita rivejä,

mikä tekee sen kanssa työskentelystä paljon helpompaa

11 vuotta sitten

Älä lue aikaisempia kommentteja päivämääristä säästääksesi mielesi ;)

Kun molemmat merkkijonot voidaan muuntaa numeerisiksi (("$a" > "$b") -testissä), käytetään tuloksena saatuja numeerisia numeroita, muuten FULL-merkkijonoja verrataan merkki kerrallaan:

var_dump("1.22" > "01.23" ); //bool(false)
var_dump("1.22.00" > "01.23.00" ); //bool(tosi)
var_dump("1-22-00" > "01-23-00" ); //bool(tosi)
var_dump((kellua)"1.22.00" > (kelluke)"01.23.00" ); //bool(false)
?>

PHP:n merkkijonot on ympäröity kerta- tai kaksoislainausmerkeillä. Suurin ero on, että voit laittaa muuttujan lainausmerkkien sisään:

Nyt voimme keksiä toisen ratkaisun ongelmaan oppitunnista Muuttujat PHP:ssä:

$title"; kaiku"

$sisältöä
"; ?>

Miten PHP löytää muuttujan merkkijonosta?

Se on yksinkertaista. Muistatko mitä merkkejä voidaan käyttää muuttujan nimessä? Nämä ovat numeroita, kirjaimia ja alaviivoja _.

Joten PHP ottaa nimekseen kaiken, mikä on $-symbolin ja ensimmäisen kielletyn merkin välissä.

Seuraavassa koodissa PHP määrittää muuttujan nimen väärin ja antaa virheilmoituksen:

Tulos selaimessa:

Huomautus: Määrittelemätön muuttuja: pricerub rivillä D:\OpenServer\domains\site\index.php rivillä 3

Jotta PHP voi määrittää oikein merkkijonon muuttujan nimen, sinun on sijoitettava se aaltosulkeisiin () :

Tulos selaimessa:

1499 ruplaa

Ei ole selvää yksimielisyyttä siitä, mitä lainausmerkkejä tulisi käyttää tavallisissa merkkijonoissa, joissa mitään ei tarvitse korvata. Monet ohjelmoijat käyttävät kuitenkin mieluummin yksittäisiä lainausmerkkejä.

Tosiasia on, että monille lainausmerkit herättävät assosioinnin "tälle riville on lisättävä jotain". Siksi suosittelen yksittäisten lainausmerkkien käyttöä tavallisessa tekstissä ja kaksoislainausmerkkejä vain silloin, kun sinun on korvattava tekstissä muuttuja. Esimerkki:

Pakenevat lainaukset

Jos sinun täytyy laittaa lainausmerkkejä merkkijonon sisään, voit tehdä sen kahdella tavalla:

Toisessa esimerkissä kenoviiva \ ohittaa seuraavan lainauksen, joten PHP käsittelee sitä merkkijonona.

Mitä sinun mielestäsi pitäisi tehdä, jotta näytössä näkyy vain kenoviiva? Loppujen lopuksi se pakenee viimeisestä lainauksesta. Se on hauskaa, mutta sinun on kirjoitettava toinen kauttaviiva, jotta voit välttää ensimmäisen:

Taulukot ja rivinvaihdot lainausmerkeissä

Lainausmerkkien kenoviiva mahdollistaa lainausmerkkien ja itsensä lisäksi myös joidenkin muiden merkkien välttämisen. Suosituimmat ovat sarkain (pitkä väli, jonka saat, kun painat SARKAINTA) ja rivinvaihto. Ne näyttävät tältä:

Kirjoita käsikirjoitus, joka:
1. Luo $type-muuttujan, jonka arvo on Game.
2. Luo $name-muuttujan, jonka arvo on "World of Warcraft" (lainausmerkein).
3. Näyttää molemmat muuttujat tunnisteen sisällä

. Muuttujien välissä on oltava väli.

Merkkijonotyypin arvot ovat tekstimerkkijonoja (lyhyesti merkkijonoja). Merkkijono on nollan tai useamman merkin sarja. Merkkejä ovat kirjaimet, numerot, välimerkit, erikoismerkit ja välilyönnit.

Merkkijono voidaan määrittää neljällä eri tavalla:

  • kaksoislainausmerkit
  • yksittäisiä lainauksia
  • heredoc syntaksi
  • nowdoc syntaksi

Merkkijono lainausmerkeissä

Merkkijono lainausmerkeissä:

Voit käyttää Escape-sarjoja kaksoislainausmerkkijonoissa. Ohjausjärjestys— Nämä ovat erikoismerkkejä, jotka on suunniteltu muotoilemaan tekstitulostetta. Seuraavat pakosarjat ovat saatavilla PHP:ssä:

Kaksilainausmerkkisten merkkijonojen tärkein ominaisuus on kyky käsitellä muuttujia merkkijonojen sisällä.


Dollarin merkki: \$";

Lainausmerkkien sisällä olevat merkkijonot voivat sisältää yksittäisiä lainausmerkkejä:

Echo "Yksi lainaus: "";

Merkkijono yksittäisissä lainausmerkeissä (heittomerkit)

Merkkijono yksittäisissä lainausmerkeissä:

$str = "Merkkijono"; echo "Yksi iso rivi voidaan jakaa useiksi pieniksi riveiksi lukemisen helpottamiseksi.";

Toisin kuin kaksoislainausmerkkijonoja ja heredoc-syntaksia, yksittäisten lainausmerkkien sisällä olevia muuttujia ja ohjaussekvenssejä (yhtä poikkeusta lukuun ottamatta) ei käsitellä. Tämä tarkoittaa, että ne tulkitaan tavallisiksi merkkijonomerkeiksi:

$num = 10; echo "Numero: $num
Dollarin merkki: \$";

Jotta voit käyttää yksittäisiä lainausmerkkejä yksittäisten lainausmerkkien sisällä olevassa merkkijonossa, sinun on poistettava ne kenoviivalla (\"). Jos haluat kirjoittaa kenoviivan, sinun on kopioitava se (\\):

Echo "Käytä \"yksittäisiä\" lainausmerkkejä"; echo "kenoviiva: \\";

Yksittäisiin lainausmerkkeihin suljetut merkkijonot voivat sisältää kaksoislainausmerkkejä:

Echo "Kaksoislainaus: "";

Heredoc syntaksi

Heredoc-syntaksi on vaihtoehtoinen tapa kirjoittaa merkkijonoja.

Heredoc-syntaksilla määritetty merkkijono toimii samalla tavalla kuin lainausmerkkien sisällä oleva merkkijono. Ero Heredocin ja kaksoislainausmerkkijonon välillä on se, että Heredocissa ei tarvitse paeta lainausmerkkejä.

Heredoc-syntaksi alkaa kolmella merkillä<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. Heti tunnisteen perässä tulee olla rivinvaihto, sen jälkeen ei saa olla muita merkkejä kuin rivinvaihto, muuten tapahtuu virhe. Seuraavaksi tulee itse merkkijonon sisältö. Merkkijonon sisällön jälkeen erilliselle riville on määritettävä sulkeva tunniste (sama kuin<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

Nowdoc-syntaksi

Nowdoc-syntaksi, kuten Heredoc, on vaihtoehtoinen tapa kirjoittaa merkkijonoja.

Nowdoc-syntaksilla määritetty merkkijono toimii samalla tavalla kuin lainausmerkkien sisällä oleva merkkijono. Ero Nowdocin ja kertalainausmerkkijonon välillä on se, että Nowdocissa ei tarvitse välttää yksittäisiä lainausmerkkejä.

Nowdocin syntaksi on samanlainen kuin Heredocin, sillä ainoa ero on, että avaustunniste on suljettava lainausmerkkeihin:

$num = 10; kaiku<<<"some_id" Число: $num some_id;

Muuttujien käsittely merkkijonoissa

Merkkijonojen muuttujien käsittelyyn on olemassa kahdenlaisia ​​syntaksia: yksinkertainen Ja vaikea.

Yksinkertainen syntaksi- silloin muuttujan nimi ilmoitetaan rivillä sellaisenaan.

Kun tulkki kohtaa dollarimerkin, se alkaa tarkistaa peräkkäin, ovatko kaikki seuraavat merkit kelvollisia merkkejä muuttujan nimessä. Joten kelvollisen muuttujan nimen muodostamiseksi se kaappaa mahdollisimman monta merkkiä:

$str = "Maailma!"; echo "Hei $str";

Monimutkainen syntaksi- Tämä on silloin, kun muuttujan nimi on suljettu aaltosulkeisiin.

Koska tulkki sieppaa rivillä olevan muuttujan käsittelemiseksi mahdollisimman monta merkkiä, on tilanteita, joissa tulkki ei pysty itsenäisesti määrittämään, mihin muuttujan nimi päättyy:

$sport1 = "tahto"; $urheilu2 = "jalka"; echo "Pidän $sport1ballista ja $sport2ballista";

Tässä tapauksessa haluttua tulosta ei saavuteta, koska tulkki pitää $sport1 osana muuttujan nimeä $sport1bol, jota ei ole olemassa.

Jos haluat kertoa tulkille nimenomaisesti, mihin muuttujan nimi päättyy, sinun on sisällytettävä muuttujan nimi aaltosulkeisiin:

$sport1 = "tahto"; $urheilu2 = "jalka"; echo "Pidän ($sport1)bol ja ($sport2)bol.";

Dollarimerkki voidaan sijoittaa joko kiharan aaltosulkeen eteen tai sen jälkeen:

$sport1 = "tahto"; $urheilu2 = "jalka"; echo "Pidän $(sport1)bol ja ($sport2)bol.";

Yhdistäminen

Yhdistäminen on kahden tai useamman merkkijonon yhdistämistä yhdeksi suuremmaksi merkkijonoksi. Kytkentä tapahtuu käyttämällä ketjutusoperaattoria - . (piste). Yhdistettäessä jokainen seuraava rivi lisätään edellisen loppuun:

Minkä tahansa tyyppinen arvo, joka on ketjutettu merkkijonoon, muunnetaan implisiittisesti merkkijonoksi ja ketjutetaan sitten:

"; echo "Numero: " . 1; ?>

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ää.

Yksittäisiin lainausmerkkeihin suljetuista merkkijonoista löytyviä erikoismerkkien muuttujia ja erotussarjoja 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 nopeampaa on käsitellä merkkijonoja yksittäisissä lainausmerkeissä.

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ä lainausmerkkiä 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 (\).
// Tulostus: Yksinkertainen merkkijono
kaiku "Yksinkertainen merkkijono";
Tässä on esimerkki lainausmerkkien käytöstä:
// Tulokset: Yritys "Snowdrop"
echo "Yritys \"Snowdrop\"";
// Tulostus: Tämä johtaa uuteen riviin
echo "Tämä katkeaa uudelle riville \n";
// Tulostus: Muuttuja 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 sivun lähdekoodissa).
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< 1000000; $i++) {
for ($i = 0; $i
}
$text = "Tässä on merkkijono";
// Laske käytetty aika

$aika = (mikroaika(tosi) - $aloitus);
Tulos: 0,09 sekuntia.

Jos korvaamme 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

Yksittäiset lainaukset

$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.:

Tuplalainausmerkit

Ei ole mikään salaisuus, että PHP:n lainausmerkit voivat olla kerta- tai kaksinkertaisia. Selvitetään, milloin tietyt lainausmerkkien käyttötavat ovat sopivampia.

Yksinkertaisin tapa määrittää merkkijono on laittaa teksti lainausmerkkeihin.

Lainausmerkkien sisällä oleva merkkijono tunnistaa useimmat erikoismerkkien erotussekvenssit.

Tärkein ero on se, että lainausmerkit käsittelevät muuttujia.

Esimerkkejä lainausmerkkien käytöstä:

Keskitytään siihen, että lainausmerkeillä varustetut merkkijonot käsittelevät muuttujia.

Mitä tapahtuu, kun merkkijono käsitellään? Tulkki tarkista jokaisen merkkijonon muuttujat lainausmerkeillä, eli pakotettu jäsennys tapahtuu, mikä vie lisäaikaa. Kyllä, usein tämä on sekunnin murto-osa, mutta itse tosiasia on ymmärrettävä. Eli jos vertaat yhden merkkijonon käsittelyä eri lainausmerkeillä (tietysti ilman muuttujia), niin yksittäisiä lainausmerkkejä sisältävä merkkijono käsitellään varmasti nopeammin.

Laskelmat

Löysin mielenkiintoisia laskelmia tästä aiheesta ProfiPHP:n verkkosivuilta. Kirjoittaja kirjoitti yksinkertaisen käsikirjoituksen, jolla hän laski merkkijonojen käsittelyajan.

© 2024 ermake.ru - Tietoja PC-korjauksesta - Tietoportaali