Stringek

A string-eket kétféle határoló jellel lehet létrehozni.

Ha a string dupla-idézőjelben (") van, (néhány feldolgozási korlátozás kivételével) a stringen belüli változók behelyettesítésre kerülnek. Ahogy C-ben és Perl-ben, a bekszles [backslash] (\) karakter segítségével lehet speciális karaktereket megadni:

Táblázat 6-1. Escape karakterek

szekvenciajelentés
\nújsor
\rkocsivissza
\tvízszintes [normál] tab
\\backslash [nem sajthib, 1 backslash ugye nem elég...]
\$dollár jel [a Ft még hiányzik a nyelvből, talán az 5.hu változatban :]
\"dupla-idézőjel
\[0-7]{1,3} karakterek olyan sorozata, amely illeszkedik a reguláris kifejezésre, melynek jelentése kb. oktális szám [pontosabban 1-3 '0'-'7' intervallumban levő karakter] [ezt, mint stringet ne akarjuk kiírni :)]
\x[0-9A-Fa-f]{1,2} karakterek olyan sorozata, amely illeszkedik a szabályos kifejezésre, melynek jelentése kb. hexa szám [pontosabban 1 vagy 2 hexa számjegy] [ezt se]

Bármely más karakter is írható a \ mögé, de warning-ot fog eredményezni a legfelső warning-szinten.

A második módja a stringek megadásának a szimpla-idézőjel (') karakter. Amikor egy string szimpla-idézőjelek közt van, az egyetlen escape szekvencia, amit a nyelv megért a "\\" és a "\'". Ez kényelmi szempontok miatt van így, ugyanis így lehetnek szimpla-idézőjelek és backslashek a szimpla-idézőjeles szövegben. A változók nem helyettesítődnek be az értékükkel az ilyen stringen belül.

Másik módja a stringek megadásának a "here doc" [NEM tessék, doki:) {parasolventia}] szintaxis ("<<<"). [ez itt megint nem elírás, kedves unix-shell programozó!] Először megadunk a <<< után egy stringvég szöveget, majd a stringet, majd a stringvég szöveget egymagában a sor elején. A stringvég szövegnek mindenképpen a sor legelső karakterén kell kezdődnie.

Példa 6-1. "Here doc" string példa [VAS: Vége A Stringnek de helyette lehet bármi:)]

  1 
  2 
  3 $str = <<<VAS
  4 Példa egy stringre, amely
  5 több sorban van, és here doc
  6 szintaxisú
  7 VAS;
  8 
  9      

Megjegyzés: A "here doc" a PHP 4-ben került a nyelvbe.

A stringeket össze lehet fűzni a '.' (pont) operátorral. A '+' (összeadás) operátor erre nem jó. [a Perlből is kikopott...] Bővebb leírásért nézd meg a String operátorok részt.

A stringben levő karaktereket elérhetjük, mint egy számozott karaktertömböt, C szintaxist használva. Aki nem tud C-ül, nézze az alábbi példákat.

Példa 6-2. String példák

  1 
  2 
  3 <?php
  4 /* String hozzárendelése */
  5 $str = "Ez egy string";
  6 
  7 /* Hozzáfűzés */
  8 $str = $str . " több szöveggel";
  9 
 10 /* Hozzáfűzés egy más módja újsor karakterrel a végén */
 11 $str .= " és egy újsor a végére.\n";
 12 
 13 /* Ez a string végülis ilyen lesz: '<p>Szám: 9</p>' */
 14 $num = 9;
 15 $str = "<p>Szám: $num</p>";
 16 
 17 /* Ez meg: '<p>Szám: $num</p>' */
 18 $num = 9;
 19 $str = '<p>Szám: $num</p>';
 20 
 21 /* A string első karaktere kerül first-be  */
 22 $str = 'Ez egy teszt.';
 23 $first = $str[0];
 24 
 25 /* Most meg az utolsó */
 26 $str = 'Ez még mindig egy teszt';
 27 $last = $str[strlen($str)-1];
 28 ?>
 29 
 30      

String konverziók

Amikor egy string számként értékelődik ki, az eredmény típusa a következőképp kerül meghatározásra.

A string double-ként értékelődik ki, ha a '.', 'e', vagy 'E' karakterek bármelyikét tartalmazza. Egyébként egészként értékelődik ki.

Az érték meghatározása a string első karakterei alapján történik. Ha a string érvényes számmal kezdődik, ez az érték kerül felhasználásra. Máskülönben az érték 0 lesz [nulla, nem nagy O betű]. Érvényes számnak tekintendő, amelynek opcionális előjelét egy vagy több számjegy követi (melyben lehet egy tizedespont), végül lehet exponense. Az exponens egy 'e' vagy 'E' karakter, melyet egy vagy több szám követ.

Ha az első tag string, a változó típusát a második kifejezés határozza meg.

  1 
  2 
  3 $foo = 1 + "10.5";              // $foo most double (11.5)
  4 $foo = 1 + "-1.3e3";            // $foo most  double (-1299)
  5 $foo = 1 + "bob-1.3e3";         // $foo most integer (1)
  6 $foo = 1 + "bob3";              // $foo most integer (1)
  7 $foo = 1 + "10 Kicsi Pingvin";  // $foo most integer (11)
  8 $foo = 1 + "10 Kicsi Pingvinke" // $foo most integer (11)
  9 $foo = "10.0 disznó " + 1;      // $foo most integer (11)
 10 $foo = "10.0 disznó " + 0.5;    // $foo most double (10.5) [szóval 10 disznó, meg egy féldisznó]
 11 
 12      

Ha többet szeretnél megtudni erről a konverzióról, akkor nézd meg a Unix manualt strtod(3). [=RTFM]

Ha szeretnéd kipróbálni valamelyik fejezetbeli példát, elmásolhatod innen a példákat és beszúrhatod az alábbi sort, hogy lásd mi is történik.

[Ahhoz nem árt azért előbb érteni a beszúrt sort. A beszúrandó sting elején a "\" azért van, hogy a $foo helyére NE a foo változó értéke kerüljön, hanem a \$ hatására a $ karakter íródjon ki, majd a foo karaktersor, egy egyenlőségjel, és utána a $foo változó értéke. Az első "\" hatására ugyanis a köv. karakter ("$") elveszti különleges jelentését, és kimásolódik a kimenetre, majd jön a "foo=" szöveg, ez is úgy, ahogy van a kimenetre kerül, a fordító nem is találkozott változóval, amit be kellene helyettesíteni. Aztán jön a $foo, ezt már felismeri a fordító, és a változó értékét írja ki]:

  1 
  2 
  3 echo "\$foo==$foo; típusa " . gettype ($foo) . "<br>\n";
  4 
  5