A string karakterek sorozata. PHP-ben egy karakter pontosan egy bytenak felel meg, így 256 különböző karakter lehetséges. Ez azt is jelenti, hogy a PHP-nek jelenleg nincs beépített Unicode támogatása. Néhány Unicode támogatásért lásd a utf8_encode() és a utf8_decode() függvényeket.
Megjegyzés: Nem okozhat problémát a stringek körében, hogy túl hosszúvá válnak. Semmiféle korlát nem létezik a PHP által kezelt stringek méretére, ezért nem kell tartani a hosszú stringektől.
A stringeket háromféleképpen lehet létrehozni.
A legkönnyebben úgy adhatunk meg egy egyszerű stringet, hogy aposztrófok (' karakterek) közé tesszük.
Ha a stringben egy aposztófot szeretnél elhelyezni, és azzal nem a string végét szeretnéd jelezni, más nyelvekhez hasonlóan egy visszaperjel karaktert kell alkalmaznod az aposztóf előtt (\). Ha egy aposztróf, vagy a string vége előtt el szeretnél helyezni egy visszaperjelet, meg kell dupláznod azt. Figyelj arra, hogy ha bármilyen más karakter elé teszel visszaperjelet, a visszaperjel meg fog jelenni a stringben. Emiatt gyakran nincs szükség magának a visszaperjelnek a duplázására.
Megjegyzés: PHP 3 használatakor azonban egy E_NOTICE szintű figyelmeztetést kapsz, ha ezt kihasználod.
Megjegyzés: A többi móddal ellentétben, az aposztrófos stingben a változók értékei és az escape szekvenciák nem helyettesítődnek be.
<?php |
Ha egy stringet idézőjelek (") közé helyezünk, a PHP több speciális jelölés feldolgozására lesz képes:
Táblázat 11-1. Speciális jelölések idézőjeles stringben
jelölés | jelentése |
---|---|
\n | újsor (LF vagy 0x0A (10) ASCII kódú karakter) |
\r | kocsivissza (CR vagy 0x0D (13) ASCII kódú karakter) |
\t | vízszintes tabulátor (HT vagy 0x09 (9) ASCII kódú karakter) |
\\ | visszaperjel |
\$ | dollárjel |
\" | idézőjel |
\[0-7]{1,3} | egy karaktersorozat, ami oktális számokra illeszkedik |
\x[0-9A-Fa-f]{1,2} | egy karaktersorozat, ami hexadecimális számokra illeszkedik |
Ha bármilyen más karakter elé visszaperjelet írsz, ebben az esetben is ki fog íródni a visszaperjel.
A legfontosabb jellemzője az idézőjeles stringeknek az, hogy a változók behelyettesítésre kerülnek. Lásd a változók behelyettesítése című részt további részletekért.
Egy másfajta módszer a stringek megadására a heredoc szintaxis ("<<<"). [ez itt megint nem elírás, kedves unix-shell programozó!] A <<< jelzés után egy azonosítót kell megadni, majd a stringet, és végül az azonosítót mégegyszer, ezzel zárva le a stringet.
A lezáró azonosítónak mindenképpen a sor legelső karakterén kell kezdődnie. Ugyancsak figyelni kell arra, hogy ez az azonosító is az általános PHP elemek elnevezési korlátai alá tartozik: csak alfanumerikus karaktereket és aláhúzást tartalmazhat, és nem kezdődhet számjegy karakterrel.
Figyelem |
Nagyon fontos, hogy odafigyelj arra, hogy a lezáró azonosítót tartalmazó sor ne tartalmazzon semmi mást, csupán esetleg egy pontosvessző (;) karaktert. Ez még pontosabban azt is jelenti, hogy az azonosító nem lehet beljebb kezdve, és nem szabad semmilyen szóköz vagy tabulátor karaktert sem elhelyezni a pontosvessző előtt vagy után. Fontos, hogy az záróazonosító előtt szerepelnie kell egy újsor karakternek az operációs rendszernek megfelelően. Ez például Macintosh-on \r. Ha ezt a szabály megsérted és a záróazonosító nem "tiszta", akkor nem lesz záróazonosítónak tekitve, így a PHP tovább fogja keresni. Ebben az esetben, ha nem talál érvényes záróazonosítót, akkor szintaktikai hibát fog adni, ahol a hiba sorának száma a szkript végére fog mutatni. |
A heredoc az idézőjeles stringekhez hasonlóan működik, az idézőjelek nélkül. Ez azt jelenti, hogy nem kell visszaperjellel jelülni az idézőjeleket a szövegben, de a fenti speciális jelölések használhatóak. A változók értékei behelyettesítődnek, de az idézőjeles karaktersorozatokhoz hasonlóan gondosan kell ügyelni a komplex változó hivatkozások megadására.
Megjegyzés: A heredoc a PHP 4-esben került a nyelvbe.
Ha egy stringet idézőjelek között, vagy heredoc szintaxissal adsz meg, a jelölt változók értékei behelyettesítésre kerülnek.
Kétféleképpen lehet megadni egy változót: az egyszerű és a komplex formátummal. Az egyszerű forma a leggyakoribb és legkényelmesebb. Lehetőséget ad egy skalár, tömb érték vagy egy objektum tulajdonság beillesztésére.
A komplex szintaxis a PHP 4-es változatában került a nyelvbe, és a jelölésben használatos kapcsos zárójelekről ismerhető fel.
Ha dollár ($) jelet talál a PHP egy stringben, mohón megkeresi az összes ezt követő azonosítóban is használható karaktert, hogy egy érvényes változónevet alkosson. Használj kapcsos zárójeleket, ha pontosan meg szeretnéd határozni, meddig tart egy változó.
<?php |
Hasonlóképpen meg lehet adni tömbindexet vagy objektum tulajdonságot is. A tömbindexek esetében a záró szögletes zárójel (]) jelöli az index végét, az objektum tulajdonságoknál az egyszerű skalárok szabályai érvényesek, habár objektum tulajdonágok esetén nem használható a fenti trükk.
<?php |
Bármely ennél komplexebb helyettesítéshez a komplex szintaxis használatos.
Ezt nem azért nevezzük komplexnek, mert a szintaxis komplex, hanem azért, mert így komplex kifejezések helyettesítésére nyílik lehetőség.
Gyakorltilag bármilyen változó érték behelyettesíthető ezzel a szintaxissal. Egyszerűen úgy kell megadni az értéket adó kifejezést, mintha a stringen kívül dolgoznál vele, és utána { és } jelek közé kell zárni. Mivel a '{' jel megadására nincs speciális jelölés, ez a forma csak akkor fog működni, ha a { után közvetlenül egy $ jel található. (Használhatod a "{\$" vagy "\{$" jelöléseket, ha a stringben a "{$" sorozatot szeretnéd beilleszteni, és nem változóhelyettesítést adsz meg). Néhány példa, ami tisztázhatja a félreértéseket:
<?php |
A string karaktereire nullától számozott indexekkel lehet hivatkozni, a string neve után megadott kapcsos zárójelek között.
Megjegyzés: Kompatibilitási okokból a tömböknél használatos szögletes zárójelek is alkalmazhatóak a karakterek eléréséhez. Ez a tömb jelzés azonban nem javasolt a PHP 4-től.
Stringeket a '.' (pont) stringösszefűző operátorral tudsz összefűzni. A '+' (összeadás) operátor nem alkalmas erre a feladatra. Lásd a String operátorok című részt további információkért.
Számos hasznos függvény létezik stringek manipulálásához.
Lásd a string függvények című részt általános függvényekért, a reguláris kifejezés függvényeket fejlett kereséshez és cserékhez (két formában: Perl és POSIX kiterjesztett).
Külön függvények léteznek URL stringekhez, és stringek kódolásához/dekódolásához (mcrypt és mhash kódolások).
Végül ha ezek között sem találod, amit keresel, lásd a karakter típus függvényeket.
Stringgé konvertálni a (string) módosítóval vagy a strval() függvénnyel tudsz. A string konverzió automatikusan végrehajtódik olyan környezetben, ahol string értékre van szükség. Ez echo() és print() függvények használatánál megtörténik, vagy olyankor, amikor változó értékét stringgel hasonlítod össze. A Típusok és Bűvészkedés a típusokkal részek elolvasása segíthet a következők megértésében. Lásd még a settype() függvényt.
A boolean TRUE érték az "1" stringgé, a FALSE pedig a "" (üres string) stringgé konvertálódik. Ily módon alakítgathatsz oda-vissza a logikai és szöveges adatok között.
Egy egész (integer) vagy egy lebegőpontos szám (float) úgy konvertálódnak, hogy az eredményül kapott string a szám számjegyeiből áll (beleértve az exponenciális részt lebegőpontos számok esetén).
A tömbök mindig az "Array" stringgé konvertálódnak, tehát így nem tudod kiiratni egy tömb tartalmát echo() vagy print() függvénnyel Egy elem kiírásához használj valami ehhez hasonlót: echo $arr['ize']. Lásd lejjebb a teljes tartalom kiírására vonatkozó javaslatokat.
Az objektumok mindig az "Object" stringgé konvertálódnak. Ha egy attribútumának az értékét szeretnéd kiírni, olvasd el a lenti bekezdéseket. Ha azt szeretnéd kideríteni, hogy egy objektum melyik osztálynak a példánya, használd a get_class() függvényt. A PHP 5-ös verziójától a konverzió az objektum __toString() metódusának meghívásával történik.
Az erőforrások (resource) mindig "Resource id #1" formájú strigekké alakítódnak át, ahol 1 az erőforrás egyedi azonosító száma, amelyet a PHP oszt ki futásidőben. Ha az erőforrás típusát szeretnéd megtudni, használd a get_resource_type() függvényt.
A NULL mindig az üres stringgé konvertálódik.
Amint fent olvashattad, tömbök, objektumok és erőforrások kiírása nem szolgáltat semmi hasznos információt magukról az értékekről. A hibakezelés (debug) esetén használható értékek kiírására egy jobb módszer megismeréséhez tanulmányozd a print_r() és a var_dump() függvényeket.
A PHP értékeket alakíthatod úgy is stringgé, hogy örökre el tudd tárolni azokat. Ezt a módszert szerializációnak nevezik, és a serialize() függvény alkalmazható erre. A PHP értékeket XML struktúrába is tudod szerializálni, abban az esetben, ha van a PHP konfigurációdban WDDX.
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 lebegőpontoské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.
<?php |
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ó string elején a "\" azért van, hogy a $ize helyére NE a ize változó értéke kerüljön, hanem a \$ hatására a $ karakter íródjon ki, majd a ize karaktersor, egy egyenlőségjel, és utána a $ize 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 "ize=" 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 $ize, ezt már felismeri a fordító, és a változó értékét írja ki]:
Ne reméld, hogy egy karaker kódját megkapod, ha egésszé konvertálod (mint ahogyan például C-ben tennéd). Használd a ord() és a chr() függvényeket a karakterkódok és a karakterek közötti konverzióra.