![]() |
James Thornton |
| Internet Business Consultant | Call Toll Free: 1 (800) 409-2501 |
| About James | Google Profile | Electric Speed | The Electors | Juced | Contact Me |
|---|
Typ string oznacza ³añcuch znaków. W PHP znak jest tym sam co bajt, co oznacza, ¿e jest mo¿liwych 256 ró¿nych znaków. Oznacza to tak¿e, ¿e PHP nie posiada ¿adnej wbudowanej obs³ugi Unikodu.
Notatka: Nie ma technicznych problemów, które utrudnia³yby tworzenie bardzo d³ugich ci±gów znaków. Nie ma te¿ ustalonej maksymalnej d³ugo¶ci ³añcuchów znaków obs³ugiwanych w PHP, wiêc nie ma powodu do obaw, ¿e dany ³añcuch jest zbyt d³ugi.
£añcuch znaków mo¿na utworzyæ na trzy sposoby.
Najprostszym sposóbem na zdefiniowanie prostego ³añcucha znaków, jest umieszczenie go w pojedynczych cudzys³owach (znak ').
Aby w takim ³añcuch umie¶ciæ symbol pojedynczego cudzys³owu, nale¿y go poprzedziæ uko¶nikiem wstecznym (\), tak jak w wielu innych jêzykach programowania. Je¶li uko¶nik wsteczny ma wyst±piæ przed symbolem pojedynczego cudzys³owu lub na koñcu ³añcucha, wtedy nale¿y napisaæ go dwukrotnie. W przypadku u¿ycia uko¶nika wstecznego z innym znakiem, uko¶nik te¿ zostanie wy¶wietlony! Nie ma zatem potrzeby pisania uko¶nika dwukrotnie w innych sytuacjach.
Notatka: W PHP 3, ostrze¿enie na poziomie E_NOTICE zostanie wy¶wietlone, je¶li zajdzie powy¿sza sytuacja.
Notatka: W przeciwieñstwie do dwóch pozosta³ych sk³adni, zmienne nie bêd± zamienione na swoje warto¶ci, kiedy pojawi± siê pomiêdzy pojedynczymi cudzys³owami.
echo 'przyk³adowy tekst'; echo 'Wewn±trz ³añcuchów znaków mog± siê znajdowaæ prze³amania linii, o w³a¶nie takie.'; echo 'Adam powiedzia³: "I\'ll be back"'; // wynik: ... "I'll be back" echo 'Czy na pewno chcesz skasowaæ C:\\*.*?'; // wynik: ... skasowaæ C:\*.*? echo 'Czy na pewno chcesz skasowaæ C:\*.*?'; // wynik: ... skasowaæ C:\*.*? echo 'Próbujê w tym miejscu wprowadziæ: \n znak nowej linii'; // wynik: ... wprowadziæ: \n znak nowej linii |
Kiedy ³añcuch znaków jest umieszczony pomiêdzy podwójnymi cudzys³owami, PHP interpretuje wiêcej sekwencji cytowania dla znaków specjalnych:
Tabela 7-1. Znaki cytowane (specjalne)
| sekwencja | znaczenie |
|---|---|
| \n | nowa linia (LF lub 0x0A (10) w ASCII) |
| \r | powrót karetki (CR lub 0x0D (13) w ASCII) |
| \t | tabulacja pozioma (HT lub 0x09 (9) w ASCII) |
| \\ | odwrotny uko¶nik |
| \$ | znak dolara |
| \" | cudzys³ów podwójny |
| \[0-7]{1,3} | sekwencja znaków pasuj±ca do powy¿szego wyra¿enia regularnego daje znak zapisany w notacji ósemkowej |
| \x[0-9A-Fa-f]{1,2} | sekwencja znaków pasuj±ca do powy¿szego wyra¿enia regularnego daje znak zapisany w notacji szesnastkowej |
Tak jak w poprzedniej sk³adni, zapisanie uko¶nika wstecznego przed ka¿dym innymi znakiem spowoduje wy¶wietlenie zarówno uko¶nika, jak i znaku.
Ale najwa¿niejsz± w³a¶ciwo¶ci± podwójnych cudzys³owów jest to, ¿e zapisane w nich zmienne zostan± zamienione na ich warto¶ci. Wiêcej informacji w rozdziale parsowanie ³añcuchów znaków.
Jeszcze jednym sposobem na zapisanie ³añcucha znaków jest u¿ycie skladni heredoc ("<<<"). Po operatorze <<< powinno siê umie¶ciæ identyfikator i takim samym identyfikatorem trzeba zakoñczyæ ³añcuch znaków.
Identyfikator zamykaj±cy musi zaczynaæ siê w pierwszej kolumnie nowej linii. Identyfikator musi te¿ podlegaæ regu³om nazewnictwa w PHP: musi siê sk³adaæ wy³±cznie z alfanumerycznych znaków oraz znaku podkre¶lenia i musi zaczynaæ siê od litery lub znaku podkre¶lenia.
| Ostrze¿enie |
Wa¿ne by pamiêtaæ, ¿e linia zawieraj±ca identyfikator zamykaj±cy nie mo¿e zawieraæ ¿adnych innych znaków, z wyj±tkiem ¶rednika (;). Znaczy to przede wszystkim, ¿e identyfikator zamykaj±cy nie mo¿e byæ wcinany, i nie mo¿e byæ ¿adnych spacji ani tabulacji przed lub za ¶rednikiem. Najbardziej dokuczliwym ograniczeniem jest to, ¿e wewn±trz tego ³añcucha znaków nie mo¿e byæ znaku powrotu karetki (\r) na koñcu linii, jedynie znak nowej linii (\n). Poniewa¿ Microsoft Windows u¿ywa jako znaku koñca linii sekwencji \r\n, ³añcuchy znaków zapisne w sk³adni heredoc mog± nie dzia³aæ, je¶li skrypt zostanie napisany w edytorze windowsowym. Na szczê¶cie wiêkszo¶æ edytorów tekstowych udostêpnia mo¿liwo¶æ zapisania pliku w uniksowym formacie koñca linii. |
Sk³adnia heredoc zachowuje siê podobnie jak tekst w cudzys³owach podwójnych. Oznacza to te¿, ze nie ma potrzeby cytowania cudzys³owów w tej sk³adni, ale nadal mo¿na u¿ywaæ znaków cytowanych, opisanych powy¿ej. W tej sk³adni nazwa zmiennej zamieniana jest na jej warto¶æ, ale nale¿y zachowaæ ostro¿no¶æ przy zapisie z³o¿onych zmiennych razem z tekstem.
Notatka: Obs³uga sk³adni heredoc zosta³a dodana w PHP 4.
Kiedy ³añcuch znaków jest zapisany w cudzys³owach podwójnych lub w sk³adni heredoc, zawarte w nim nazwy zmiennych s± parsowane, tzn. zamieniane na ich warto¶ci.
S± dwa rodzaje sk³adni, prosta i z³o¿ona. Sk³adnia prosta jest najbardziej popularna i najwygodniejsza, pozwala na parsowanie zmiennej, warto¶ci z tablicy oraz w³a¶ciwo¶ci obiektu.
Sk³adnia z³o¿ona pojawi³a siê w PHP 4, i mo¿na j± rozpoznaæ po nawiasach klamrowych, otaczaj±cych wyra¿enie.
Je¶li wewn±trz zmiennej pojawi siê znak dolara ($), parser pobierze tyle znaków, ile tylko siê da, aby utworzyæ poprawn± nazwê zmiennej. Aby jawnie okre¶liæ koniec nazwy zmiennej, nale¿y j± zapisaæ w klamrach.
$beer = 'Heineken';
echo "$beer's taste is great"; /* dzia³a, "'" nie jest poprawnym znakiem nazwy
zmiennej*/
echo "He drunk some $beers"; /* nie dzia³a, 's' jest poprawnym znakiem nazwy
zmiennej*/
echo "He drunk some ${beer}s"; // dzia³a |
Podobnie dzia³a parsowanie elementu tablicy lub w³a¶ciwo¶ci obiektu. Dla tablic, prawy nawias prostok±tny (]) oznacza koniec indeksu. Dla w³a¶ciwo¶ci obiektu obowi±zuj± te same regu³y jak dla zwyk³ych zmiennych, jednak nie dzia³aj± tu opisane powy¿ej sztuczki ze zmiennymi.
$owoce = array( 'truskawka' => 'czerwona' , 'banan' => '¿ó³ty' ); // zauwa¿ ¿e to dzia³a inaczej poza cudzys³owami echo "Banan jest $owoce[banan]."; echo "Kwadrat ma szeroko¶æ $kwadrat->szeroko¶æ metrów."; // Nie dzia³a. Trzeba tu zastosowaæ sk³adniê z³o¿on± echo "Kwadrat ma szeroko¶æ $kwadrat->szeroko¶æ00 centymetrów."; |
Do wyra¿eñ bardziej skomplikowanych nale¿y u¿ywaæ sk³adni z³o¿onej.
Nazwa tej sk³adni nie pochodzi od skomplikowanego zapisu, tylko od mo¿liwo¶ci obs³ugi bardziej z³o¿onych wyra¿eñ.
Za pomoc± tej sk³adni mo¿na umieszczaæ w ³añcuchach znaków ka¿d± warto¶æ istniej±c± w przestrzeni nazw. Odpowiednie wyra¿enie pisze siê tak, jakby mia³o ono znajdowaæ siê gdziekolwiek poza ³añcuchem znaków, a potem tylko umieszcza siê je miêdzy { i }. Poniewa¿ nie mo¿na cytowaæ "{", sk³adnia ta bêdzie prawid³owo rozpoznana tylko wtedy, kiedy $ znajduje siê bezpo¶rednio za {. (U¿yj "{\$" lub "\{$" aby uzyskaæ "{$"). Poni¿ej kilka przyk³adów:
$fajne = 'fantastyczne';
echo "To jest { $fajne}"; // nie dzia³a, zwraca: To jest { fantastyczne}
echo "To jest {$fajne}"; // dzia³a, zwraca: To jest fantastyczne
echo "Kwadrat ma szeroko¶æ {$kwadrat->szeroko¶æ}00 centimetrów.";
echo "To dzia³a: {$arr[4][3]}";
// Tak jest ¼le z tego samego powodu
// co $foo[bar] poza ³añcuchem.
echo "Tak jest ¼le: {$arr[foo][3]}";
echo "Prawid³owo jest tak: {$arr['foo'][3]}";
echo "Mo¿na nawet pisaæ tak: {$obj->warto¶ci[3]->nazwa}";
echo "To jest warto¶æ zmiennej o nazwie $nazwa: {${$nazwa}}"; |
Dostêp do pojedynczego znaku ³añcucha jest mo¿liwy po podaniu jego indeksu (ofsetu) w nawiasach klamrowych, zaraz po nazwie zmiennej. Pierwszy znak w ³añcuchu ma indeks zero.
Notatka: Dla zachowania kompatybilno¶ci wstecznej, nadal mo¿na u¿ywaæ nawiasów kwadratowych, jednak sk³adnia ta w PHP 4 uznana jest za przestarza³±.
Przyk³ad 7-3. Przyk³ady u¿ywania ³añcuchów znaków
|
£añcuchy znaków ³±czy siê za pomoc± operatora '.' (kropka). Proszê pamiêtaæ, ¿e operator dodawania '+' nie wykonuje operacji ³±czenia ³añcuchów. Wiêcej informacji w rozdziale operatory ³añcuchowe.
PHP posiada mnóstwo funkcji operuj±cych na ³añcuchach znaków.
Najwiêcej na ten temat w rozdziale funkcje ³añcuchowe. Poza tym obs³ugiwane s± wyra¿enia regularne dla potrzeb zaawnsowanych operacji znajd¼ i zamieñ (w dwóch odmianach: Perl oraz POSIX extended).
S± tak¿e funkcje obs³ugi ³añcuchów URL, jak równie¿ funkcje szyfrowania i deszyfrowania ³añcuchów (mcrypt oraz mhash).
Je¶li nadal nie znalaz³e¶ tego, czego potrzebujesz, byæ mo¿e pomog± ci funkcje kontroli typu znaków.
Je¶li ³añcuch znaków jest konwertowany na postaæ liczbow±, rezultat konwersji bêdzie zale¿a³ od poni¿szych czynników.
£añcuch zostanie skonwertowany do typu float, je¶li zawiera znaki ".", "e" lub "E". W przeciwnym razie zostanie skonwertowany do typu integer.
Warto¶æ liczbowa ³añcucha znaków zale¿y od pierwszych znaków tego ³añcucha. Je¶li ³añcuch zaczyna siê od poprawnej warto¶ci liczbowej, warto¶æ ta bêdzie u¿ywa przy konwersji. W przeciwnym razie zwrócona bêdzie warto¶æ 0 (zero). Poprawna warto¶æ liczbowa zaczyna siê od opcjonalnego znaku, po którym znajduje siê jedna, lub kilka cyfr (opcjonalnie zawieraj±ce przecinek dziesiêtny), po którym opcjonalnie znajduje siê eksponent. Eksponent jest to znak "e" lub "E", po którym nastêpuje jedna, lub wiêcej cyfr.
Kiedy pierwszym wyra¿eniem jest ³añcuch znaków, typ zmiennej bêdzie zale¿a³ od drugiego wyra¿enia.
$foo = 1 + "10.5"; // $foo jest typu float (11.5) $foo = 1 + "-1.3e3"; // $foo jest typu float (-1299) $foo = 1 + "bob-1.3e3"; // $foo jest typu integer (1) $foo = 1 + "bob3"; // $foo jest typu integer (1) $foo = 1 + "10 ma³ych ¶winek"; // $foo jest typu integer (11) $foo = 1 + "10 malutkich ¶winek"; // $foo jest typu integer (11) $foo = "10.0 ¶winek " + 1; // $foo jest typu integer (11) $foo = "10.0 ¶winek " + 1.0; // $foo jest typu float (11) |
Wiêcej informacji na temat tej konwersji znajduje siê w podrêczniku Uniksa, na stronie polecenia strtod(3).
Je¶li chcia³by¶ przetestowaæ który¶ z przyk³adów w tym rozdziale, mo¿esz je skopiowaæ i wkleiæ, a nastêpnie dodaæ poni¿sz± liniê i obserwowaæ rezultaty.
| Poprzedni | Spis tre¶ci | Nastêpny |
| Liczby zmiennoprzecinkowe (float) | Pocz±tek rozdzia³u | Tablice (array) |
| Vintage Sinks
cantonantiques.com |
James Thornton, jamesthornton.com>Services: Marketing Internet |
Electric Speed: Usability For The Web |