Zložené zátvorky v php. Operátori PHP. Operátor zátvoriek

Zložené zátvorky v php. Operátori PHP. Operátor zátvoriek

Jednoduchá syntax

Ak tlmočník narazí na znak dolára ($), zachytí čo najviac znakov, aby vytvoril platný názov premennej. Ak chcete zadať koniec názvu, uzatvorte názov premennej do zložených zátvoriek.

$pivo = "Heineken" ;
echo "$ chuť piva je skvelá" ; // funguje, """ je neplatný znak pre názov premennej
echo "Vypil nejaké $pivá" ; // nefunguje, "s" je platný znak pre názov premennej
echo "Vypil nejaké $(pivo)s" ; // Tvorba
echo "Vypil nejaké ($pivo)s" ; // Tvorba
?>

Prvok poľa ( pole) alebo vlastnosť objektu ( objekt). V indexoch poľa je uzatváracia hranatá zátvorka ( ] ) označuje koniec definície indexu. Pre vlastnosti objektu platia rovnaké pravidlá ako pre jednoduché premenné, aj keď ich nemožno oklamať tak ako pri premenných.

// Tieto príklady sú konkrétne o internom používaní polí
// riadky. Mimo reťazcov vždy priložte svoje kľúče reťazcov
// pole v úvodzovkách a nepoužívajte vonkajšie reťazce (zátvorky).

// Ukážme všetky chyby
error_reporting(E_ALL);

$fruits = array("jahoda" => "červená" , "banán" => "žltá" );

// Funguje, ale všimnite si, že mimo citovaného reťazca to funguje inak
ozvena "Banán je $ovocie.";

//Tvorba
ozvena "Banán je ($fruits["banana"]).";

// Funguje, ale PHP, ako je popísané nižšie, najprv hľadá
// konštantný banán.
ozvena "Banán je ($ovocie).";

// Nefunguje, použite zložené zátvorky. Spôsobí to chybu spracovania.
ozvena "Banán je $ovocie["banán"].";

// Tvorba
echo "Banán je". $fruits [ "banán" ] . "." ;

// Tvorba
ozvena "Tento štvorec má šírku $square->šírka metrov.";

// Nefunguje. Pozrite si komplexnú syntax riešenia.
ozvena "Tento štvorec má šírku $square->width00 centimetrov.";
?>

Pre zložitejšie úlohy môžete použiť komplexnú syntax.

Komplexná (kučeravá) syntax

Táto syntax sa nazýva komplexná nie preto, že by bola ťažko zrozumiteľná, ale preto, že umožňuje použitie zložitých výrazov.

V skutočnosti môžete do riadku s touto syntaxou zahrnúť akúkoľvek hodnotu, ktorá je v mennom priestore. Jednoducho napíšete výraz rovnakým spôsobom ako mimo riadku a potom ho uzavriete do ( a ). Keďže nemôžete ukončiť znak „(“, táto syntax bude rozpoznaná iba vtedy, keď bezprostredne nasleduje znak $ (. (Na ukončenie znaku „($“) použite „(\$“ alebo „\($“)). Niektoré ilustratívne príklady:

// Ukážme všetky chyby
error_reporting(E_ALL);

$skvelý = "fantastický" ;

// Nefunguje, zobrazí sa: Toto je (fantastické)
echo "Toto je ($ skvelé)" ;

// Funguje, tlačí: Toto je fantastické
echo "Toto je ($ skvelé)" ;
echo "Toto je $(skvelé)" ;

// Tvorba
ozvena "Tento štvorec má šírku ($square->width) 00 centimetrov.";

// Tvorba
ozvena "Funguje to: ($arr)";

// Toto je neplatné z rovnakého dôvodu ako $foo je neplatné mimo
// riadky. Inými slovami, stále to bude fungovať,
// ale keďže PHP hľadá najprv konštantu foo, spôsobí to
// chyba úrovne E_NOTICE (nedefinovaná konštanta).
ozvena "Toto je nesprávne: ($arr)";

// Tvorba. Pri použití viacrozmerných polí vo vnútri
// riadky vždy používajú zložené zátvorky
ozvena "Toto funguje: ($arr["foo"])";

// Tvorba.
echo "Funguje to: ". $arr [ "foo" ][ 3 ];

Echo "Dokonca môžete písať ($obj->values->name)";

Echo "Toto je hodnota premennej s názvom $name: ($($name))";
?>

Znaky v reťazcoch možno použiť a upraviť zadaním ich posunu od začiatku reťazca, počnúc nulou, v zložených zátvorkách za reťazcom. Tu je niekoľko príkladov:

// Získa prvý znak reťazca
$str = "Toto je test." ;
$first = $str ( 0 );

// Získame tretí znak reťazca
$tretina = $str ( 2 );

// Získanie posledného znaku reťazca
$str = "Stále je to skúška.";
$posledny = $str ( strlen ($str ) - 1 );

// Zmena posledného znaku riadku
$str = "Pozri sa na more";
$str ( strlen ($str ) - 1 ) = "ja" ;

?>

Reťazcové funkcie a operátory

Operátory reťazcov

Rôzne programovacie jazyky používajú rôzne operátory zreťazenia (spájania) reťazcov. Napríklad Pascal používa operátor „+“. Použitie operátora „+“ na zreťazenie reťazcov v PHP je nesprávne: ak reťazce obsahujú čísla, tak namiesto zreťazenia reťazcov sa vykoná operácia sčítania dvoch čísel.

PHP má dva operátory, ktoré vykonávajú zreťazenie.

Prvým je operátor zreťazenia ("."), ktorý vracia zreťazenie ľavého a pravého argumentu.

Druhým je operátor priradenia so zreťazením, ktorý pripája pravý argument k ľavému.

Uveďme konkrétny príklad:

$a = "Ahoj" ;
$b = $a . "Svet!" ; // $b obsahuje reťazec "Ahoj svet!" - Toto je zreťazenie

$a = "Ahoj" ;
$a .= "Svet!" ; // $a obsahuje reťazec "Ahoj svet!" - Toto je úloha so zreťazením
?>

Operátory porovnávania reťazcov

Neodporúča sa používať porovnávacie operátory == a != na porovnávanie reťazcov, pretože vyžadujú konverziu typu. Príklad:

$x = 0;
$y=1;
if ($x == "" ) echo "

x - prázdny reťazec

" ;
if ($y == "" ) echo "

y - prázdny reťazec

"
;
// Výstupy:
// x je prázdny reťazec
?>

Tento skript nám hovorí, že $x je prázdny reťazec. Dôvodom je skutočnosť, že prázdny reťazec ("") sa najskôr považuje za 0 a až potom sa považuje za "prázdny". V PHP sa operandy porovnávajú ako reťazce iba vtedy, ak sú oba reťazce. Inak sa porovnávajú ako čísla. V tomto prípade každý reťazec, ktorý PHP nedokáže previesť na číslo (vrátane prázdneho reťazca), bude považovaný za 0.

Príklady porovnania reťazcov:

$x = "Reťazec" ;
$y = "Reťazec" ;
$ z = "riadok" ;
if ($x == $z) echo "

Reťazec X sa rovná reťazcu Z

" ;
if ($x == $y) echo "

Reťazec X sa rovná reťazcu Y

"
;
if ($x != $z) echo "

Reťazec X NIE JE rovný reťazcu Z

"
;
// Výstupy:
// Reťazec X sa rovná reťazcu Y

?>

Aby nedošlo k zámene a konverzii typu, odporúča sa pri porovnávaní reťazcov použiť operátor ekvivalencie. Operátor ekvivalencie vám vždy umožňuje správne porovnávať reťazce, pretože porovnáva hodnoty podľa hodnoty aj podľa typu:

$x = "Reťazec" ;
$y = "Reťazec" ;
$ z = "riadok" ;
if ($x == = $z) echo "

Reťazec X sa rovná reťazcu Z

" ;
if ($x === $y) echo "

Reťazec X sa rovná reťazcu Y

"
;
if ($ x !== $ z ) echo "

Reťazec X NIE JE rovný reťazcu Z

"
;
// Výstupy:
// Reťazec X sa rovná reťazcu Y
// Reťazec X NIE JE rovný reťazcu Z
?>

V minulom príspevku sme sa pozreli na syntax podmieneného príkazu v PHP. V tejto poznámke budeme hovoriť o zátvorkách operátorov. Budete sa s nimi stretávať neustále. Toto je základný koncept každého programovacieho jazyka.

Wikipedia nám pomôže odpovedať na otázku, aké sú zátvorky operátorov:

Zátvorky operátora- zátvorky alebo príkazy, ktoré definujú blok príkazov v programovacom jazyku, vnímaný ako jeden celok, ako jeden príkaz.

Pascal používa nasledujúcu konštrukciu na označenie zátvoriek operátora: začať…. koniec. V jazykoch podobných C (ktoré zahŕňajú PHP), zátvorky operátora sú popísané pomocou symbolov {…} .

Tie. inými slovami, viaceré príkazy v zátvorkách operátora sa považujú za 1 príkaz.

V článku o podmienkach v PHP bol príklad:

$b) ( echo „Premenná A je väčšia ako B“; ) else ( echo „Premenná B je väčšia ako A“; ) ?>

V tomto príklade sú zátvorky operátora použité 2-krát. Rámujú operátorov

  • ozvena„Premenná A je väčšia ako B“;
  • ozvena„Premenná B je väčšia ako A“;

V tomto príklade je iba 1 príkaz uzavretý v zátvorkách, takže je to ekvivalentné napísaniu niečoho takého:

$b) echo "Premenná A je väčšia ako B"; inak echo "Premenná B je väčšia ako A"; ?>

Syntax:

If (podmienka) výraz 1; inak výraz 2;

Povedzme, že chceme zobraziť ďalší riadok na obrazovke, ak nie je splnená podmienka. Zmeňme tiež hodnoty našich premenných tak, že teraz $a bol > $ b. Upravme náš kód:

$b) echo "Premenná A je väčšia ako B."; else echo "Premenná B je väčšia ako A."; echo "Áno..áno A je v skutočnosti menšie ako B."; ?>

Poďme na to... Čo vidíme na obrazovke:

Premenná A je väčšia ako B. Áno..áno A je v skutočnosti menšia ako B.

Niekde je tu chyba. Ako ste možno uhádli, celý bod je v tom, že keďže je naša podmienka pravdivá (a > b), kód sa spustí:

Echo "Premenná A je väčšia ako B.";

Vo vlákne inak Máme len 1 výraz:

Echo "Premenná B je väčšia ako A.";

Nasledujúci výraz sa vykoná bez ohľadu na podmienku. Páči sa ti to:

$b) echo "Premenná A je väčšia ako B."; else echo "Premenná B je väčšia ako A."; echo "Áno..áno A je v skutočnosti menšie ako B."; ?>

Teraz použijeme zátvorky operátora a spojíme 2 výrazy vo vetve inak:

$b) ( echo "Premenná A je väčšia ako B."; ) else ( echo "Premenná B je väčšia ako A."; echo "Áno..áno A je v skutočnosti menšia ako B."; ) ?>

Kód sa stal oveľa prehľadnejším. Teraz PHP chápe, že ak podmienka ($a > $b) nie je splnená, potrebuje vytlačiť 2 riadky. A ak je podmienka pravdivá - len jedna.

Moja veľká pre teba radu– vždy používajte držiaky operátorov, aj keď nepotrebujete kombinovať niekoľko operátorov do 1 bloku. Faktom je, že:

  • Kód je takto ľahšie čitateľný. Pri letmom pohľade na kód vidíme jeho jednotlivé bloky a nie vinaigrettu písmen a čísel.
  • Často je potrebné vykonať zmeny v starom kóde. Ak ste nemali zátvorky operátora a pridali ste (ako v našom prípade) nejaký kód, logika programu bude nesprávna. Možno si to hneď ani nevšimnete.

Dobrý deň, milí začínajúci programátori. Pokračujme v štúdiu prvkov, ktoré tvoria.

V tomto článku sa dozvieme, čo sú to operátori php. V skutočnosti niektoré poznáme takmer od detstva, no poznáme ich len ako znaky (+, -, =, !, ?).

V php sa všetky nazývajú operátori, čo je celkom logické, keďže vykonávajú špecifickú akciu alebo operáciu.

Dalo by sa dokonca povedať, že všetky vytlačiteľné znaky, ktoré nie sú písmenom alebo číslom, sú operátormi v PHP. Ale to nie je všetko, pretože existujú operátory pozostávajúce z písmen.

Začnime po poriadku.

Aritmetické operátory

Aritmetické operátory sa používajú na vykonávanie operácií s číslami.

+ je operátor sčítania;
— — operátor odčítania;
/ - operátor divízie;
* — operátor násobenia;
% je operátor na získanie zvyšku počas delenia;
++ — operátor pre zvýšenie o jedna (prírastok);
— — — zníženie o jeden operátor (zníženie)

Pri písaní sa zvyčajne pred a za operátorom umiestňuje medzera. Robí sa to len pre uľahčenie čítania kódu, hoci tento priestor nič neovplyvňuje a ak chcete, môžete sa bez neho zaobísť.

Zložité výrazy sa skladajú podľa pravidiel akceptovaných v aritmetike, to znamená, že násobenie a delenie majú prednosť pred sčítaním a odčítaním, a ak sú vo výraze prítomné oboje, posledné uvedené sú uzavreté v zátvorkách.

echo (6 + 7) * (7 + 8); // 195
?>

Pri vykonávaní akcie delenia celého čísla celým číslom sa v prípade získania zvyšku výsledok automaticky prevedie na reálne číslo (číslo s pohyblivou rádovou čiarkou).

ozvena 8/3; //2,66666666666
?>

Počet vytlačených číslic pre zlomkové číslo závisí od hodnoty nastavenej v direktíve presnosti nachádzajúcej sa v súbore php.ini. Zvyčajne je to 12 znakov bez započítania bodky.

Operátor % sa bežne používa na určenie, či je jedno číslo deliteľné druhým bezo zvyšku alebo nie.

echo 53328 % 4 ; //0
?>

Volajú sa operácie s aritmetickými operátormi, s výnimkou inkrementácie a dekrementácie binárne, pretože zahŕňajú dva operandy (člen + člen, dividenda / deliteľ atď.)

Akcie zvýšenia a zníženia sa nazývajú unárne, pretože zahŕňajú jeden operand. Je tam ešte nejaké podmienená operácia, ktorý zahŕňa tri operandy.

Operátory inkrementácie (++) a dekrementácie (- -) sa vzťahujú len na premenné.

Typ premennej celé číslo (celé čísla)

$dalsi = 3 ;
echo + $ ďalší; // 4
?>

Reťazec premenného typu

$next = "abc";
echo $ďalší; // abd
?>

Namiesto písmena "c" sa vytlačí písmeno "d", pretože je ďalšie v abecede a hodnotu premennej sme zvýšili o jednotku.

Príklady zobrazujú akcie s prírastkom a rovnakým spôsobom môžete vykonávať akcie s prírastkom.

Bitové operátory

Bitové operátory sú navrhnuté na prácu s binárnymi údajmi. Ak niekto nevie, čo to je, vysvetlím. Binárne čísla sú čísla ako 1001000011100000111000.

Keďže takéto údaje sa pri vývoji webových stránok takmer vôbec nepoužívajú, nebudeme sa im podrobne venovať. Len vám ukážem, ako vyzerajú, aby ste si pri stretnutí s takýmito symbolmi vedeli predstaviť, s čím máte do činenia.

& - bitové spojenie AND (and);
~ — bitová negácia (nie);
| — bitové spojenie OR (alebo);
^ — bitová eliminácia OR (xor);
<< — сдвиг влево битового значения операнда;
>> — posunutie bitovej hodnoty operandu doprava;

Je dosť pravdepodobné, že sa s týmito operátormi stretnete, keďže binárne dáta sú široko používané pri vývoji počítačových grafických programov. Ale na ich štúdium, ak to niekto potrebuje, bude musieť absolvovať samostatný kurz o inom zdroji.

Porovnávacie operátory

Porovnávacie operátory sú logické operátory a používajú sa na porovnávanie premenných. Polia a objekty sa pomocou nich nedajú porovnávať.

> - operátor väčší ako;
=> - operátor väčší alebo rovný;
< — оператор меньше;
<= — оператор меньше или равно;
== — operátor rovnosti;
!= — operátor nerovnosti;
=== — operátor ekvivalencie (hodnota a typ premennej sú rovnaké);
!== — operátor neekvivalencie;

V dôsledku porovnania sa na obrazovke zobrazí buď jedna, ktorá zodpovedá true (true), alebo prázdny reťazec, ktorý zodpovedá false (false).

echo 1 > 0; // 1
ozvena 1< 0 ; // пустая строка
echo 1 => 0; // 1
ozvena 1 == 1 ; // 1
?>

Takže samotné porovnávacie operátory sa takmer nikdy nepoužívajú. Ich hlavným účelom je pracovať v spojení s príkazom if.

Podmienečné vyhlásenia if, else, elseif.

Podmienené operátory sa tak nazývajú, pretože sú navrhnuté tak, aby testovali určitú podmienku v závislosti od toho, ktorá konkrétna akcia sa vykonáva.

Príkaz if berie ako argument boolovskú premennú alebo výraz. Ak je podmienka pravdivá, zobrazí sa výsledok, ak nie, zobrazí sa prázdny riadok.



ak ($ ​​ďalší< $nexT)
{
echo "Možnosť zrážok"; // Výstup Možné zrážky
}
?>

$next = "Vlhkosť vzduchu 80%";
$nexT = "Vlhkosť vzduchu 90%";
if ($next > $nexT)
{
echo "Možnosť zrážok"; // Vytlačí prázdny riadok
}
?>

Ak program potrebuje špecifikovať dve akcie, z ktorých jedna sa vykoná, ak je hodnota true, a druhá, ak je hodnota nepravdivá, potom sa spolu s príkazom if použije aj príkaz else

$next = "Vlhkosť vzduchu 80%";
$nexT = "Vlhkosť vzduchu 90%";
if ($next > $nexT)
{
echo "Možnosť zrážok";
}
inak
{
echo "Nepredpokladajú sa žiadne zrážky";
}
?>

V tomto prípade sa zobrazí „Zrážky sa neočakávajú“ a ak vo výraze zmeníte znamienko „Viac“ na „Menej“, zobrazí sa „Zrážky sú možné“. Takto podmienené operátory kontrolujú podmienku a podľa nej vydávajú správny výsledok.

Veľmi často je potrebné nastaviť viac ako dve podmienky a na ich postupnú kontrolu sa potom použije operátor elseif.



if ($next > $nexT)
{
echo "vidím";
}
elseif ($next<= $nexT)
{
echo "Sneh";
}
elseif ($next >= $nexT)
{
echo "Dážď";
}
elseif ($next == $nexT)
{
echo "Sucho";
}
inak
{
echo "Možnosť zrážok";
}
?>

Tento program vypíše "Sneh". Ak žiadna z podmienok nevyhovuje, zobrazí sa „pravdepodobnosť zrážok“.

Príkaz if môže obsahovať toľko blokov elseif, koľko chcete, ale iba jeden príkaz else.

Alternatívna možnosť záznamu je povolená - bez zložených zátvoriek. V tomto prípade sa riadky príkazov if, else, elseif končia dvojbodkou a celá konštrukcia končí kľúčovým slovom (operátorom) endif.

$next = "Vlhkosť vzduchu 50%";
$nexT = "Vlhkosť vzduchu 60%";
ak ($ ​​ďalší<= $nexT):

echo "Sneh";

elseif ($next >= $nexT):

echo "Dážď";

elseif ($next == $nexT):

echo "Sucho";

inak:

echo "Možnosť zrážok";
koniec Ak ;
?>

Logické operátory

Logické operátory sú podobné bitovým operátorom. Rozdiel medzi nimi je v tom, že prvé pracujú s logickými premennými a druhé s číslami.

Logické operátory sa používajú v prípadoch, keď potrebujete skombinovať niekoľko podmienok, čím sa zníži počet príkazov if, čo následne zníži pravdepodobnosť chýb v kóde.

&& - spojovacia spojka AND;
a - tiež AND, ale s nižšou prioritou;
|| - oddeľovacia spojka OR;
alebo - tiež OR, ale s nižšou prioritou;
xor - výhradné OR;
! - odmietavý postoj;

Nižšia priorita znamená, že ak sú prítomné obidva operátory, ako prvý sa vykoná ten s vyššou prioritou.

V budúcnosti sa na príkladoch zložitejších skriptov budeme venovať logickým operátorom podrobnejšie.

Operátor pridelenia

Operátor priradenia = priradí hodnotu pravého operandu ľavému operandu.

$next = "Ahoj"
echo "Ahoj" // Dobrý deň
?>

Operátor bodka

Operátor bodka oddeľuje celú časť čísla od zlomkovej časti a spája niekoľko reťazcov a číslo do jedného celého reťazca.

$dalsi = 22 ;
echo "Dnes po" .$ďalší. "očakáva sa mráz"; // Dnes po 22 sa očakáva mráz
?>

Operátor zátvoriek

Rovnako ako v matematike, operátor zátvoriek uprednostňuje akciu, ktorá je v nich uzavretá.

Najskôr sa vykonajú údaje v zátvorkách a potom všetky ostatné.

Operátor kučeravých zátvoriek

Existujú tri spôsoby alebo dokonca štýly umiestnenia zložených zátvoriek v PHP.

1. Štýl BSD – zátvorky sú zarovnané doľava.

ak ($next)
{

}

2. GNU štýl - zátvorky sú zarovnané odsadené od ľavého okraja

ak ($next)
{
echo „Ahoj milí začínajúci programátori“;
}

3. Štýl K&R - na riadku operátora sa otvorí zátvorka

if ($next)(
echo „Ahoj milí začínajúci programátori“;
}

Od samého začiatku si treba vybrať jeden zo štýlov a v budúcnosti pri písaní skriptov používať len ten. Navyše je úplne jedno, aký štýl preferujete. Je dôležité, aby bola jednotná počas celého programu.

Myslím, že nateraz to stačí. V zásade môžu byť operátormi nielen znaky, ale aj funkcie a ďalšie prvky, takže je veľmi ťažké ich všetky vymenovať a nemá zmysel.

Stačí mať predstavu o základných základoch. A zvyšok rozoberieme na praktických príkladoch.

Ír sa v slzách potuluje po letisku Šeremetěvo. Jeden zo zamestnancov sa rozhodol sympatizovať:
— Chýba ti vlasť?
- Vôbec nie. Práve som stratil všetku batožinu
- Ako sa to mohlo stať?
- Nerozumiem sebe. Zdá sa, že som zástrčku zapojil správne

Komentujte: V PHP 7.0.0 na 64-bitových platformách neexistujú žiadne dosiahnuteľné limity na dĺžku linky na 32-bitových systémoch a v starších verziách PHP nemôžu byť riadky väčšie ako 2 GB (2147483647 bajtov).

Syntax

Reťazec možno definovať štyrmi rôznymi spôsobmi:

  • jednoduché úvodzovky
  • dvojité úvodzovky
  • syntax nowdoc (od PHP 5.3.0)

Jednoduché úvodzovky

Najjednoduchší spôsob, ako definovať reťazec, je uzavrieť ho do jednoduchých úvodzoviek (symbol " ).

Ak chcete v reťazci použiť jednu úvodzovku, uzavrite ju spätnou lomkou ( \ ). Ak potrebujete napísať samotnú spätnú lomku, duplikujte ju ( \\ ). Všetky ostatné použitia spätnej lomky budú interpretované ako normálne znaky: to znamená, že ak sa pokúsite použiť iné únikové sekvencie, ako napr. \r alebo \n, budú na výstupe tak, ako sú, namiesto akéhokoľvek špeciálneho správania.

ozvena "toto je jednoduchý reťazec";

ozvena „Vkladať sa dá aj do riadkov
postava z nového riadku, ako je táto,
Toto je fajn"
;

// Výstupy: Arnold raz povedal: "Vrátim sa"
ozvena "Jedného dňa Arnold povedal: "Vrátim sa.";

Echo "Odstránili ste C:\\*.*?";

// Výstupy: Vymazali ste C:\*.*?
echo "Vymazali ste C:\*.*?" ;

// Výstupy: Toto sa nerozbalí: \n nový riadok
ozvena "Toto sa nerozbalí: \n nový riadok";

// Výstupy: $expand a $either premenné nie sú expandované
ozvena "$expand a $either premenné nie sú rozšírené";
?>

Dvojité úvodzovky

Ak je reťazec uzavretý v úvodzovkách ("), PHP rozpoznáva nasledujúce sekvencie špeciálnych znakov:

Únikové sekvencie
Následná Význam
\n nový riadok (LF alebo 0x0A (10) v ASCII)
\r návrat vozíka (CR alebo 0x0D (13) v ASCII)
\t horizontálna karta (HT alebo 0x09 (9) v ASCII)
\v vertikálna karta (VT alebo 0x0B (11) v ASCII) (od PHP 5.2.5)
\e escape znak (ESC alebo 0x1B (27) v ASCII) (od PHP 5.4.4)
\f zoznam stránok (FF alebo 0x0C(12) v ASCII) (od PHP 5.2.5)
\\ spätné lomítko
\$ znak dolára
\" dvojitý citát
\{1,3} sekvencia znakov, ktoré sa zhodujú s regulárnym výrazom osmičkového znaku, ktorý ticho preteká, aby sa zmestil do bajtu (t. j. "\400" === "\000")
\x(1,2) postupnosť znakov zodpovedajúca regulárnemu výrazu znaku v hexadecimálnom zápise
\u(+) sekvencia znakov zodpovedajúcich regulárnemu výrazu znakov Unicode, ktorý sa mapuje na reťazec v reprezentácii UTF-8 (pridané v PHP 7.0.0)

Rovnako ako v prípade reťazca uzavretého v jednoduchých úvodzovkách, escapovanie ľubovoľného znaku tiež vypíše samotný únikový znak. Pred PHP 5.1.1 použite spätné lomítko \($var) nebola zverejnená.

Heredoc

Tretím spôsobom, ako definovať reťazce, je použiť syntax heredoc: <<< . Za týmto operátorom musíte zadať identifikátor a potom posun riadkov. Potom nasleduje samotný riadok a potom rovnaký identifikátor, ktorý uzatvára vkladanie.

Linka musieť začínať koncovým identifikátorom, t.j. musí sa objaviť v prvom stĺpci riadku. Okrem toho musí identifikátor spĺňať rovnaké pravidlá pomenovania ako všetky ostatné značky v PHP: obsahovať iba alfanumerické znaky a podčiarkovník a nesmie začínať číslom (podčiarkovníky sú povolené).

Pozornosť

Je veľmi dôležité poznamenať, že záverečný riadok identifikátora nesmie obsahovať žiadne iné znaky okrem bodkočiarky ( ; ). To znamená, že id by nemali byť odsadené a že pred ani za bodkočiarkou nemôžu byť žiadne medzery ani tabulátory. Je tiež dôležité pochopiť, že prvý znak pred koncovým identifikátorom musí byť znak nového riadku, ako ho definuje váš operačný systém. Napríklad v systémoch UNIX vrátane macOS je to tak \n. Bezprostredne za koncovým identifikátorom musí začínať aj nový riadok.

Ak je toto pravidlo porušené a koncový identifikátor nie je „čistý“, považuje sa koncový identifikátor za chýbajúci a PHP ho bude ďalej hľadať. Ak sa v tomto prípade nikdy nenájde správny koncový identifikátor, spôsobí to chybu analýzy s číslom riadku na konci skriptu.

Príklad č. 1 Príklad nesprávnej syntaxe

trieda foo (
verejný $bar =<<bar
EOT;
// odsadenie pred koncovým identifikátorom nie je povolené
}
?>

Príklad #2 Príklad správnej syntaxe

trieda foo (
verejný $bar =<<bar
EOT;
}
?>

Heredoc nemožno použiť na inicializáciu polí triedy. Počnúc PHP 5.3 sa toto obmedzenie vzťahuje len na heredocs obsahujúce premenné.

Text Heredoc sa správa rovnako ako reťazec v dvojitých úvodzovkách bez toho, aby ich mal. To znamená, že v heredoc nemusíte uvádzať úvodzovky, ale stále môžete použiť sekvencie escape vyššie. Premenné sa spracúvajú, ale pri používaní komplexných premenných v rámci heredocu musíte byť rovnako opatrní ako pri práci s reťazcami.

Príklad č. 3 Príklad definície reťazca Heredoc

$str =<<Príklad riadku,
v niekoľkých líniách,
pomocou syntaxe heredoc.
EOD;

Trieda foo
{
var $foo ;
var $bar ;

Function__construct()
{
$this -> foo = "Foo" ;
$this ->
}
}

$foo = new foo();
$name = "Meno" ;

ozvena<<Moje meno je "$name". Píšem $foo -> foo .
Teraz dedukujem
( $foo -> bar [ 1 ]) .
Výsledkom by malo byť veľké písmeno "A": \x41
EOT;
?>

Moje meno je "Meno". píšem Foo. Teraz vypíšem Bar2. Výsledkom by malo byť veľké písmeno "A": A

Je tiež možné použiť syntax heredoc na prenos údajov cez argumenty funkcie:

Od verzie 5.3.0 je možné inicializovať statické premenné a vlastnosti/konštanty triedy pomocou syntaxe heredoc:

Príklad #5 Použitie heredoc na inicializáciu statických premenných

// Statické premenné
funkcia foo()
{
statický $bar =<<Nič tu nie je...
ŠTÍTOK;
}

// Vlastnosti konštanty/triedy
trieda foo
{
const BAR =<<Príklad použitia konštanty
FOOBAR;

Verejný $baz =<<Príklad použitia poľa
FOOBAR;
}
?>

Od PHP 5.3.0 môžete tiež umiestniť identifikátor Heredoc do dvojitých úvodzoviek:

Nowdoc

Nowdoc je rovnaký pre reťazce v jednoduchých úvodzovkách ako heredoc pre reťazce s dvojitými úvodzovkami. Nowdoc je podobný ako heredoc, ale vo vnútri nevykonávajú sa žiadne náhrady. Tento dizajn je ideálny na vkladanie kódu PHP alebo iných veľkých blokov textu bez toho, aby ste ho museli opustiť. V tomto je trochu podobný konštruktu SGML vyhlásením bloku textu, ktorý nie je určený na spracovanie.

Nowdoc je označený rovnakou sekvenciou <<< , ktorý sa používa v heredoc, ale nasledujúci identifikátor je uzavretý v jednoduchých úvodzovkách, napr. <<<"EOT" . Všetky podmienky, ktoré sa vzťahujú na identifikátory heredoc, sa vzťahujú aj na nowdoc, najmä tie, ktoré sa vzťahujú na koncový identifikátor.

Príklad #7 Príklad použitia nowdoc

ozvena<<<"EOD"
Ukážkový text,
zahŕňajúce niekoľko riadkov
pomocou syntaxe nowdoc. So spätnými lomkami sa vždy zaobchádza doslova,
napríklad \\ a \".
EOD;

Výsledok spustenia tohto príkladu:

Príklad textu presahujúceho viacero riadkov pomocou syntaxe nowdoc. Spätné lomky sa vždy spracúvajú doslovne, ako napríklad \\ a \".

Príklad #8 Nowdoc reťazec cituje príklad s premennými

/* Zložitejší príklad s premennými. */
trieda foo
{
verejné $foo ;
verejný $bar ;

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

$foo = new foo();
$name = "Meno" ;

ozvena<<<"EOT"
Moje meno je "$name". Tlačím $foo->foo.
Teraz tlačím ($foo->bar).
Toto by nemalo vydávať veľké "A": \x41
EOT;
?>

Výsledok spustenia tohto príkladu:

Moje meno je "$name". Tlačím $foo->foo. Teraz tlačím ($foo->bar). Toto by nemalo vydávať veľké "A": \x41

Príklad #9 Príklad použitia statických údajov

trieda foo (
verejný $bar =<<<"EOT"
bar
EOT;
}
?>

Komentujte:

Podpora nowdoc bola pridaná v PHP 5.3.0.

Manipulácia s premennými

Ak je reťazec zadaný v úvodzovkách alebo pomocou heredoc, premenné v ňom sú spracované.

Existujú dva typy syntaxe: jednoduchá a zložitá. Jednoduchá syntax je jednoduchšia a pohodlnejšia. Umožňuje spracovať premennú, hodnotu poľa ( pole) alebo vlastnosti objektu ( objekt) s minimálnym úsilím.

Zložitú syntax možno identifikovať podľa zložených zátvoriek okolo výrazu.

Jednoduchá syntax

Ak tlmočník narazí na znak dolára ( $ ), zachytí čo najviac znakov, aby vytvoril platný názov premennej. Ak chcete zadať koniec názvu, uzatvorte názov premennej do zložených zátvoriek.

$šťava = "jablko" ;

echo "Vypil nejaký $džúsový džús." . PHP_EOL ;

// Nesprávne. "s" je platný znak pre názov premennej, ale premenná má názov $šťava.
echo "Vypil nejaký džús vyrobený z $džúsov." ;

// Správne. Koniec názvu premennej je striktne uvedený v zátvorkách:
echo "Vypil nejaký džús vyrobený z $( džúsu ) s." ;
?>

Výsledok spustenia tohto príkladu:

Vypil trochu jablkového džúsu. Vypil trochu šťavy z . Vypil trochu šťavy z jabĺk.

Prvok poľa ( pole) alebo vlastnosť objektu ( objekt). V indexoch poľa je uzatváracia hranatá zátvorka ( ] ) označuje koniec definície indexu. Pre vlastnosti objektu platia rovnaké pravidlá ako pre jednoduché premenné.

Príklad #10 Jednoduchý príklad syntaxe

definovať ("KOOLAID" , "koolaid1" );
$juices = array("jablko" , "pomaranč" , "koolaid1" => "fialová" );

echo "Vypil nejaké $džúsy [ 0 ] šťavy." . PHP_EOL ;
echo "Vypil nejaké $džúsy [ 1 ] šťavy." . PHP_EOL ;
echo "Vypil nejaké $džúsy [ koolaid1 ] džús." . PHP_EOL ;

triedni ľudia (
public $john = "John Smith" ;
public $jane = "Jane Smith" ;
public $robert = "Robert Paulsen" ;

Verejné $kováč = "Kovář" ;
}

$people = noví ľudia();

echo "$people -> John vypil $juices [ 0 ] džús." . PHP_EOL ;
echo " $people -> john potom pozdravil $people -> jane ." . PHP_EOL ;
echo "$people -> manželka Johna pozdravila $people -> robert." . PHP_EOL;
echo " $people -> robert pozdravil dvoch $people -> smiths ." ; // Nefunguje
?>

Výsledok spustenia tohto príkladu:

Vypil trochu jablkového džúsu. Vypil trochu pomarančového džúsu. Napil sa fialovej šťavy. John Smith vypil trochu jablkového džúsu. John Smith potom pozdravil Jane Smith. Manželka Johna Smitha pozdravila Roberta Paulsena.

Pridaná podpora PHP 7.1.0 negatívnečíselné indexy.

Príklad č. 11 Záporné číselné indexy

$string = "retazec" ;
ozvena „Znak na indexe -2 sa rovná$string [- 2 ] ." , PHP_EOL ;
$string [- 3 ] = "o" ;
ozvena "Zmena znaku na pozícii -3 na "o" vytvorí nasledujúci riadok:$string." , PHP_EOL;
?>

Výsledok spustenia tohto príkladu:

Znak s indexom -2 sa rovná n. Zmenou znaku na pozícii -3 na "o" vznikne nasledujúci riadok: silný

Pre čokoľvek zložitejšie použite komplexnú syntax.

Komplexná (kučeravá) syntax

Nazýva sa komplexný nie preto, že je ťažko pochopiteľný, ale preto, že umožňuje použitie zložitých výrazov.

Akákoľvek skalárna premenná, prvok poľa alebo vlastnosť objektu namapovaná na reťazec môže byť reprezentovaná v reťazci pomocou tejto syntaxe. Jednoducho napíšte výraz rovnakým spôsobom ako mimo riadku a potom ho zabaľte { A } . Pretože { nemôže byť escapované, táto syntax bude rozpoznaná iba vtedy $ nasleduje priamo { . Použite {\$ vytlačiť {$ . Niekoľko názorných príkladov:

// Zobraziť všetky chyby
error_reporting(E_ALL);

$skvelý = "skvelý" ;

// Nefunguje, výstupy: Toto je (skvelé)
echo "Toto je ( $skvelé )" ;

// Práce, výstupy: Toto je skvelé
echo "Toto je ($skvelé)" ;

// Tvorba
ozvena „Toto námestie je široké( $square -> width ) 00 centimetrov." ;

// Funguje, kľúčové slová v úvodzovkách fungujú iba so syntaxou zložených zátvoriek
echo "Funguje to: ( $arr [ "kľúč" ]) " ;

// Tvorba
echo "Funguje to: ( $arr [ 4 ][ 3 ]) " ;

// Toto je neplatné z rovnakého dôvodu ako $foo vonku
// riadky. Inými slovami, stále to bude fungovať,
// ale keďže PHP hľadá najprv konštantu foo, spôsobí to
// chyba úrovne E_NOTICE (nedefinovaná konštanta).
ozvena „Nie je správne:( $arr [ foo ][ 3 ]) " ;

// Tvorba. Pri internom používaní viacrozmerných polí
// riadky vždy používajú zložené zátvorky
echo "Funguje to: ( $arr [ "foo" ][ 3 ]) " ;

// Tvorba.
echo "Funguje to: ". $arr [ "foo" ][ 3 ];

ozvena "Funguje aj toto:( $obj -> hodnoty ​​[ 3 ]-> meno ) " ;

ozvena „Toto je hodnota pomenovanej premennej$meno : ($( $meno)) ";

ozvena "Toto je hodnota názvu premennej, ktorú getName() vracia:($( getName ())) ";

ozvena "Toto je hodnota premennej podľa názvu, ktorú \$object->getName() vracia:($( $object -> getName ())) ";

// Nefunguje, výstupy: GetName() vracia toto: (getName())
ozvena "Toto vracia getName(): (getName())";
?>

Pomocou tejto syntaxe je tiež možné pristupovať k vlastnostiam objektu v rámci reťazcov.

trieda foo (
var $bar = "Ja som bar." ;
}

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

Výsledok spustenia tohto príkladu:

ja som bar. ja som bar.

Komentujte:

Funkcie, volania metód, statické premenné tried a konštanty tried fungujú interne {$} , počnúc PHP 5. Zadaná hodnota sa však bude považovať za názov premennej v rovnakom kontexte ako riadok, v ktorom je definovaná. Použitie jednoduchých zložených zátvoriek ( {} ) nebude fungovať pre prístup k hodnotám funkcií, metód, konštánt triedy alebo statických premenných triedy.

// Zobraziť všetky chyby
error_reporting(E_ALL);

triedne pivá (
const softdrink = "koreňové pivo" ;
public static $ale = "ipa" ;
}

$rootbeer = "A & W" ;
$ipa = "S Alexandrom Keithom" ;

// Funguje to, výstupy: Chcel by som A & W
echo "Chcel by som ($( piva :: nealkoholický nápoj )) \n" ;

// Toto funguje tiež, výstupy: Chcel by som Alexandra Keitha
echo "Chcel by som ($( piva :: $ale )) \n" ;
?>

Prístup a zmena znaku v reťazci

Znaky v reťazcoch možno použiť a upraviť tak, že zadáte ich posun od začiatku reťazca, začínajúc od nuly, v hranatých zátvorkách za reťazcom, napríklad $str . Predstavte si reťazec na tento účel ako pole znakov. Ak potrebujete získať alebo nahradiť viac ako 1 znak, môžete použiť funkcie substr() A substr_replace().

Komentujte: Od PHP 7.1.0 sú podporované záporné hodnoty offsetu. Určujú odsadenie od konca riadku. Predtým záporné odchýlky spôsobili chybu úrovne E_NOTICE pri čítaní (vrátenie prázdneho reťazca) resp E_WARNING pri písaní (ponechanie riadku nezmenené).

Komentujte: K znaku v reťazci možno pristupovať aj pomocou zložených zátvoriek, napríklad $str(42) .

Pozornosť

Pokus o zápis do posunu za hranicami riadku vyplní reťazec medzerami až do tohto posunu. Neceločíselné typy sa skonvertujú na celočíselné typy. Nesprávny typ posunu spôsobí chybu úrovne E_WARNING. Použije sa iba prvý znak priradeného reťazca. Od PHP 7.1.0 spôsobí priradenie prázdneho reťazca fatálnu chybu. Predtým bol v tomto prípade priradený nulový bajt (NULL).

Pozornosť

Reťazce v PHP sú interne polia bajtov. Výsledkom je, že prístup alebo úprava reťazca s posunom nie je bezpečné pre viacbajtové kódovanie a malo by sa vykonávať iba s reťazcami v jednobajtových kódovaniach, ako je ISO-8859-1.

Komentujte: Od PHP 7.1.0 spôsobí použitie prázdneho indexu predtým fatálnu chybu, v tomto prípade bol reťazec bez varovania skonvertovaný na pole.

Príklad #12 Niekoľko príkladov reťazcov

// Získa prvý znak reťazca
$str = "Toto je test." ;
$prvý = $str [ 0 ];

// Získame tretí znak reťazca
$tretina = $str [ 2 ];

// Získanie posledného znaku reťazca
$str = "Toto je stále test." ;
$posledny = $str [ strlen ($str ) - 1 ];

// Zmena posledného znaku riadku
$str = "Pozrite sa na more" ;
$str [ strlen ($str )- 1 ] = "e" ;

?>

Od PHP 5.4 musí byť offset v reťazci špecifikovaný ako celé číslo alebo reťazec obsahujúci číslice, inak sa zobrazí varovanie. Predtým offset daný reťazcom ako "foo", sa bez varovania premenil na 0 .

Príklad #13 Rozdiely medzi PHP 5.3 a PHP 5.4

$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" ]));
?>

Výsledok spustenia tohto príkladu v PHP 5.3:

string(1) "b" bool(true) string(1) "b" bool(true) string(1) "a" bool(true) string(1) "b" bool(true)

Výsledok spustenia tohto príkladu v PHP 5.4:

string(1) "b" bool(true) Upozornenie: Neplatný posun reťazca "1.0" v /tmp/t.php na riadku 7 string(1) "b" bool(false) Upozornenie: Neplatný posun reťazca "x" v / tmp/t.php na riadku 9 string(1) "a" bool(false) string(1) "b" bool(false)

Komentujte:

Pokus o prístup k premenným iných typov (okrem polí alebo objektov, ktoré implementujú určité rozhrania) pomocou alebo {} sa potichu vráti NULOVÝ.

Komentujte:

PHP 5.5 pridalo podporu pre prístup k znakom v reťazcových literáloch pomocou syntaxe alebo {} .

Existuje mnoho užitočných funkcií na úpravu reťazcov.

Základné funkcie sú popísané v časti o funkciách reťazcov a pre pokročilé vyhľadávanie a nahradzovanie funkcií regulárnych výrazov kompatibilných s jazykom Perl.

Previesť na reťazec

Hodnotu je možné previesť na reťazec pomocou pretypovania (reťazec) alebo funkcie strval(). Vo výrazoch, kde sa vyžaduje reťazec, sa konverzia uskutoční automaticky. Stáva sa to pri používaní funkcií ozvena alebo vytlačiť, alebo keď sa hodnota premennej porovnáva s reťazcom. Keď si v príručke prečítate časti Typy a Manipulácia s typmi, budú nasledujúce informácie jasnejšie. pozri tiež settype().

Polia sa vždy skonvertujú na reťazec "Pole", takže nemôžete zobraziť obsah poľa ( pole), použitím ozvena alebo vytlačiť aby ste videli, čo obsahuje. Ak chcete zobraziť jeden prvok, použite niečo ako echo $arr["foo"]. Nižšie nájdete tipy, ako zobraziť/zobraziť celý obsah.

Na konverziu typovej premennej "objekt" v type reťazec Používa sa magická metóda __toString.

Význam NULOVÝ sa vždy skonvertuje na prázdny reťazec.

Ako vidíte vyššie, priama konverzia polí, objektov alebo zdrojov na reťazec neposkytuje žiadne užitočné informácie o samotných hodnotách okrem ich typov. Lepším spôsobom výstupu hodnôt na ladenie je použitie funkcií print_r() A var_dump().

Väčšinu hodnôt v PHP je možné previesť na reťazec pre trvalé ukladanie. Táto metóda sa nazýva serializácia a možno ju vykonať pomocou funkcie serializovať ().

Prevod reťazcov na čísla

Ak je reťazec rozpoznaný ako číselná hodnota, výsledná hodnota a typ sa určia nasledovne.

Ak reťazec neobsahuje žiadny zo znakov ".", "e" alebo "E" a hodnota čísla spadá do rozsahu celých čísel (definované PHP_INT_MAX), reťazec bude rozpoznaný ako celé číslo ( celé číslo). Vo všetkých ostatných prípadoch sa považuje za číslo s pohyblivou rádovou čiarkou ( plavák).

Hodnota je určená začiatkom reťazca. Ak riadok začína platnou číselnou hodnotou, použije sa táto hodnota. V opačnom prípade bude hodnota 0 (nula). Platná číselná hodnota je jedna alebo viac číslic (ktoré môžu obsahovať desatinnú čiarku), pred ktorými môže byť znamienko, za ktorým nasleduje voliteľný exponent. Exponent je "e" alebo "E", za ktorým nasleduje jedna alebo viac číslic.

$foo = 1 + "10,5" ; // $foo je plavák (11.5)
$foo = 1 + "-1,3e3" ; // $foo je plavák (-1299)
$foo = 1 + "bob-1.3e3" ; // $foo je celé číslo (1)
$foo = 1 + "bob3" ; // $foo je celé číslo (1)
$foo = 1 + "10 malých prasiatok" ; // $foo je celé číslo (11)
$foo = 4 + "10,2 malých prasiatok" ; // $foo je plavák (14.2)
$foo = "10,0 ošípaných" + 1 ; // $foo is float (11)
$foo = "10,0 ošípaných" + 1,0 ; // $foo is float (11)
?>

Viac informácií o tejto konverzii nájdete v časti o strtod(3) v dokumentácii Unix.

Ak chcete otestovať niektorý z príkladov v tejto časti, skopírujte ho a prilepte ho a nasledujúci riadok, aby ste videli, čo sa stane:

echo "\$foo== $foo ; napíšte: " . gettype ($foo) . "
\n" ;
?>

Nečakajte, že kód znaku získate jeho konverziou na celé číslo (ako sa to robí napríklad v C). Ak chcete previesť znaky na ich kódy ASCII a späť, použite funkcie ord() A chr().

Podrobnosti implementácie typu reťazca

pred 7 rokmi

Dokumentácia to nespomína, no bodkočiarka na konci heredocu sa v skutočnosti interpretuje ako skutočná bodkočiarka a ako taká niekedy vedie k syntaktickým chybám.

$foo =<<a B C d
KONIEC;
?>

Toto neplatí:

foo (<<a B C d
KONIEC;
);
// chyba syntaxe, neočakávané ";"
?>

Bez bodkočiarky to funguje dobre:

foo (<<a B C d
KONIEC
);
?>

Pred 3 rokmi

Môžete použiť reťazec ako pole znakov (napríklad C)

$a = "Test poľa reťazcov";

var_dump($a);
// Vráti reťazec(17) "Test poľa reťazcov"

var_dump($a);
// Vrátiť reťazec(1) "S"

// -- S odovzdaním poľa --
var_dump((pole) $a);
// Vráti pole(1) ( => string(17) "Test poľa reťazcov")

var_dump((pole) $a);
// Vráti reťazec (17) "S"

Norihiori

pred 1 rokom

Akýkoľvek jednotlivý výraz, akokoľvek zložitý, ktorý začína znakom $ (t. j. premenná), môže byť () vložený do reťazca s dvojitými úvodzovkami:

Echo "Výraz ( $h -> q ()[ "x)" ]-> p (9 == 0 ? 17 : 42 )) analyzuje sa rovnako dobre ako ". $h -> q ()[ "x)" ]-> p (9 == 0 ? 17 : 42 ) . "robí." ;

?>

pred 2 rokmi

Oboje by malo fungovať :(

Testovanie triedy (
public static $VAR = "static" ;
public const VAR = "const" ;

Verejná funkcia sayHelloStatic() (
echo "ahoj: ( $this :: $VAR ) " ;
}

Verejná funkcia sayHelloConst() (
echo "ahoj: ( $toto ::VAR) " ; // Chyba analýzy: chyba syntaxe, neočakávané ")", očakáva sa "["
}
}

$obj = new Testing();
$obj -> sayHelloStatic();
$obj -> sayHelloConst ();

pred 14 rokmi

Môžete použiť komplexnú syntax na vloženie hodnoty vlastností objektu A metód objektu do reťazca. Napríklad...
triedaTest{
verejnosti
$ jeden= 1 ;
verejná funkcia
dva() {
vrátiť
2 ;
}
}
$test= novýTest();
ozvena
"foo{ $test-> jeden} bar{ $test-> dva()} " ;
?>
Výstup "foo 1 bar 2".

Nemôžete to však urobiť pre všetky hodnoty vo vašom mennom priestore. Konštanty triedy a statické vlastnosti/metódy nebudú fungovať, pretože zložitá syntax hľadá „$“.
triedaTest{
konšt
JEDEN= 1 ;
}
ozvena
"foo (Test::ONE) bar";
?>
Výsledkom bude „foo (Test::one) bar“. Konštanty a statické vlastnosti vyžadujú, aby ste reťazec prerušili.

pred 6 rokmi

Počiatočné nuly v reťazcoch sa (najmenšieho prekvapenia) nepovažujú za osmičkové.
Zvážte:
$x = "0123" + 0;
$y = 0123 + 0;
echo "x je $x, y je $y"; //vytlačí "x je 123, y je 83"
inými slovami:
* počiatočné nuly v číselných literáloch v zdrojovom kóde sa interpretujú ako "osmičkové", porov. strtol().
* úvodné nuly v reťazcoch (napr. údaje zadané používateľom), keď sa pretypujú (implicitne alebo explicitne) na celé číslo, ignorujú sa a považujú sa za desiatkové, c.f. strtod().

Pred 3 rokmi

Pozor, v súlade s „Prevodom reťazcov na čísla“:

ak ("123abc"== 123 ) ozvena"(intstr == int) nesprávne testuje ako pravdivé.";

// Pretože jedna strana je číslo, reťazec sa nesprávne skonvertuje z intstr na int, ktorý sa potom zhoduje s testovacím číslom.

// Platí pre všetky podmienky, ako sú príkazy if a switch (pravdepodobne aj while)!

// Toto môže byť veľké bezpečnostné riziko pri testovaní/používaní/ukladaní používateľského vstupu, zatiaľ čo očakávate a testujete iba celé číslo.

// Zdá sa, že jedinou opravou je, aby 123 bol reťazec ako "123", takže nedochádza k žiadnej konverzii.

?>

pred 10 rokmi

Tu je jednoduchý hack, ktorý umožní reťazcom a heredocom v dvojitých úvodzovkách obsahovať ľubovoľné výrazy v syntaxi zložených zátvoriek vrátane konštánt a iných volaní funkcií:

// Vyhlásenie o hackovaní
funkciu_expr($v) (návrat$v; }
$_expr= "_expr";

// Naše ihrisko
definovať("qwe", "asd");
definovať("zxc", 5 );

$a= 3 ;
$ b= 4 ;

funkciu c($a, $ b) (návrat$a+ $ b; }

//Použitie
ozvena"pre{ $_expr(1 + 2 )} príspevok\n"; // výstupy "pre 3 post"
ozvena"pre{ $_expr(qwe)} príspevok\n"; // výstupy "pre asd post"
ozvena"pre{ $_expr(c($a, $ b)+ zxc* 2 )} príspevok\n"; // výstupy "pre 17 post"

// Všeobecná syntax je ($_expr(...))
?>

pred 11 rokmi

Aby ste si ušetrili myseľ, nečítajte predchádzajúce komentáre o dátumoch ;)

Keď je možné previesť oba reťazce na číselné hodnoty (v teste ("$a" > "$b")), potom sa použijú výsledné číselné údaje, inak sa porovnávajú celé reťazce po znakoch:

var_dump("1.22" > "01.23" ); //bool(false)
var_dump("1.22.00" > "01.23.00" ); //bool(true)
var_dump("1-22-00" > "01-23-00" ); //bool(true)
var_dump((plavák)"1.22.00" > (plávajúci)"01.23.00" ); //bool(false)
?>

pred 2 rokmi

Domnievam sa, že by bolo užitočné pridať tento komentár, aby sa informácia objavila aspoň na správnej stránke na stránke PHP.

Upozorňujeme, že ak máte v úmysle použiť reťazec v úvodzovkách s asociatívnym kľúčom, môžete naraziť na chybu T_ENCAPSED_AND_WHITESPACE. Niektorí to považujú za jednu z menej zjavných chybových správ.

Výraz ako:

$ovocie=array(
"a"=> "jablko",
"b"=> "banán",
//atď
);

Tlačiť "Toto je$ovocie[ "a"]"; // T_ENCAPSED_AND_WHITESPACE
?>

určite sa rozpadne na kusy.

Môžete to vyriešiť nasledovne:

vytlačiť"Toto je$ovocie[ a] " ; // zrušte úvodzovku kľúča
vytlačiť"Toto je${ ovocie[ "a"]} " ; // Komplexná syntax
vytlačiť"Toto je{ $ovocie[ "a"]} " ; // Komplexná variácia syntaxe
?>

Osobne preferujem poslednú variáciu, pretože je prirodzenejšia a bližšie k tomu, aký by bol výraz mimo sláčika.

Nie je jasné (aspoň mne), prečo PHP nesprávne interpretuje jednu úvodzovku vo výraze, ale myslím si, že to má niečo spoločné s faktom, že úvodzovky nie sú súčasťou reťazca hodnôt - akonáhle sa reťazec už analyzuje, úvodzovky jednoducho prekážať...?