James Thornton logo
James Thornton
Google
Web jamesthornton.com
Internet Business Consultant Call Toll Free: 1 (800) 409-2501
About James Google Profile Electric Speed The Electors Juced Contact Me
JamesThornton.com -> PHP -> Polish -> One Page

£añcuchy znaków (string)

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.

Sk³adnia

£añcuch znaków mo¿na utworzyæ na trzy sposoby.

Pojedyncze cudzys³owy

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

Podwójne cudzys³owy

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)

sekwencjaznaczenie
\nnowa linia (LF lub 0x0A (10) w ASCII)
\rpowrót karetki (CR lub 0x0D (13) w ASCII)
\ttabulacja 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.

Sk³adnia Heredoc

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.

Przyk³ad 7-2. Przyk³ad sk³adni heredoc

<?php
$str = <<<EOD
Przyk³ad ³añcucha znaków,
zajmuj±cego kilka linii,
zapisanego w sk³adni heredoc.

Przyk³adowe zastosowanie w przezentacji liryki.

Litwo! Ojczyzno moja! ty jeste¶ jak zdrowie;
Ile ciê trzeba ceniæ, ten tylko siê dowie,
Kto ciê straci³. Dzi¶ piêkno¶æ tw± w ca³ej ozdobie
Widzê i opisujê, bo têskniê po tobie.
\tAdam Mickiewicz - Pan Tadeusz
EOD;

/* Bardziej z³o¿ony przyk³ad, ze zmiennymi */
class foo
{
    var $foo;
    var $bar;

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

$foo = new foo();
$name = 'MojeImiê';

echo <<<EOT
Nazywam siê "$name". Wy¶wietlam $foo->foo.
A teraz wy¶wietlam z tablicy: {$foo->bar[1]}.
Po dwukropku powinien pojawiæ siê znak 'A': \x41
EOT;
?>

Notatka: Obs³uga sk³adni heredoc zosta³a dodana w PHP 4.

Parsowanie zmiennych

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.

Sk³adnia prosta

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.

Sk³adnia z³o¿ona

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}}";

Indeksowanie ³añcucha (ofsety)

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

<?php
/* Przypisywanie ³añcucha do zmiennej */
$str = "To jest ³añcuch znaków";

/* Do³±czanie innego ³añcucha */
$str = $str . " a to jego dalsza czê¶æ";

/* inny sposób do³±czania, ze znakiem nowej linii na koñcu */
$str .= " wraz ze znakiem nowej linii na koñcu.\n";

/* Ten ³añcuch bêdzie zawieraæ: "<p>Liczba: 9</p>" */
$num = 9;
$str = "<p>Liczba: $num</p>";

/* Natomiast tutaj bêdzie: "<p>Liczba: $num</p>" */
$num = 9;
$str = '<p>Liczba: $num</p>';

/* Pobranie pierwszego znaku ³añcucha  */
$str = 'To jest przyk³ad.';
$pierwszy = $str{0};

/* Ostatni znak ³añcucha */
$str = 'Dalsza czê¶æ przyk³adu.';
$ostatni = $str{strlen($str)-1};
?>

Przydatne funkcje i operatory

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

Konwersja ³añcuchów 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.

echo "\$foo==$foo; jest typu " . gettype ($foo) . "<br>\n";


Vintage Sinks
cantonantiques.com Antique furniture, specializing in antique bathroom vanities