Kursy mojej produkcji

1.5 Zmienne

Zmienne są bardzo ważnym elementem PHP. Można rzec ze są nośnikami danych. Teraz skupimy się głównie na stringach czyli ciągach. W dalszej części kursu poznamy tablice. Patrząc z perspektywy czasu mogę powiedzieć, że skrypty w większości przypadków to nic innego jak aplikacje przetwarzające dane wejściowe i generujące stosowne wyniki.
Kod:
<?php
$zmienna1 ''// Pusta zmienna
$zmienna2 'dziwne literki'// zmienna z zawartością
?>
Powyższy kod tworzy dwie zmienne. Pierwsza nazywa się $zmienna1 i jest pusta. Druga otrzymała nazwę $zmienna2 i jej zawartość to dziwne literki. Jak widzicie zmienne zaczynają się od znaku $. Jeżeli przypisujemy im jakieś wartości to stosujemy znak =, a zaraz po nim żądana zawartość włożoną w cudzysłowy i kończymy znakiem ; czyli średnika. To w największym skrócie. Pamiętajmy, że nazwa zmiennej musi zaczynać się od litery bądź znaku podkreślenia. W nazwie dopuszczone są litery a-z, A-Z, 0-9 oraz znaki ASCII z zakresu 127-255.

Typy danych

W PHP mamy kilka typów danych.

Zaczynamy od typów skalarnych:
  • bool lub boolean czyli typ boolowski
  • int lub integer czyli liczba całkowita
  • float lub double czyli liczba zmiennoprzecinkowa
  • string czyli łańcuch znaków
Następnie mamy dwa typy złożone:
  • array czyli tablica
  • object czyli obiekt
Oraz dwa typy specjalne:
  • resource czyli identyfikator zasobów
  • null czyli typ pusty
Czasami w dokumentacji PHP możemy spotkać typ mixed, który oznacza akceptacje string albo array.

W PHP możemy także spotkać pseudo typ number, który oznacza integer albo float.

Ostatnim pseudo typem jest callback, który jest odwołaniem do funkcji.

Cudzysłowy pojedyncze a podwójne

W przyszłości zauważycie, że w skryptach stosuje się pojedyncze lub podwójne cudzysłowie. Ma to bezpośredni związek z tym czy pewne rzeczy maja zostać zinterpretowane w deklaracji zmiennej.
Kod:
<?php
$zmienna 'pierwsza linia\ndruga linia'// \n nie zostanie zinterpretowane
echo $zmienna;
echo "<hr />\n";
$zmienna "pierwsza linia\ndruga linia"// znak nowej linii zostanie zinterpretowany
echo $zmienna;
?>
Po odpaleniu skryptu zobaczymy, że po wyrzuceniu zmiennej za pierwszym razem \n nie zostało zinterpretowane natomiast za drugim razem już tak. To jest zasadnicza różnica miedzy ' i ".

Drugim przykładem będzie zinterpretowanie zmiennej.
Kod:
<?php
$dodatkowa_zmienna 'PHP';
$ciag_znakow 'To jest $dodatkowa_zmienna';

echo $ciag_znakow;
?>
Efektem działania powyższego skryptu będzie ciąg To jest $dodatkowa_zmienna.
Kod:
<?php
$dodatkowa_zmienna 'PHP';
$ciag_znakow "To jest $dodatkowa_zmienna";

echo $ciag_znakow;
?>
Efektem działania powyższego kodu będzie ciąg To jest PHP.

Jeżeli chcemy uzyskać taki sam wynik końcowy jak po użyciu pierwszego kodu jednak z tą rożnicą, że użyjemy " zamiast ' to musimy tylko wstawić znak \ przed $.
Kod:
<?php
$dodatkowa_zmienna 'PHP'// i tak nie wykorzystamy
$ciag_znakow "To jest \$dodatkowa_zmienna";

echo $ciag_znakow;
?>
W pojedynczym cudzysłowu $dodatkowa_zmienna pozostanie jedynie zestawem znaków, a w podwójnym zostanie zinterpretowana i do tworzonego stringu zostanie wrzucona jej zawartość. Musimy pamiętać, że używanie apostrofu jest nieco szybsze od używania cudzysłowu. Ma to znaczenie przy większych projektach. Więcej informacji o optymalizacji w dalszej części kursu.

Podsumowując powyższe przykłady wiecie już, że w cudzysłowach podwójnych dodatkowo interpretowane są Znaki cytowane czyli specjalne. Zaliczamy do nich:
  • \n czyli nowa linia (LF lub 0x0A (10) w ASCII)
  • \r czyli powrót karetki (CR lub 0x0D (13) w ASCII)
  • \t czyli tabulacja pozioma (HT lub 0x09 (9) w ASCII)
  • \\ czyli odwrotny ukośnik
  • \$ czyli znak dolara
  • \" czyli 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

Siła typu

Jeżeli chodzi o modyfikowanie typu zmiennej to PHP jest świetne pod tym względem. Dla przykładu w C gdy tworzymy zmienną to z góry musimy jej narzucić jakiś typ, natomiast w PHP mamy możliwość szybkiej zmiany typu zmiennej w dowolnym miejscu. Chce tylko powiedzieć, że w niektórych sytuacjach nie powinniśmy przywiązywać wielkiej wagi do typu zmiennej.

Łączenie ciągów

Łaczenie ciagow jest bardzo proste i odbywa się przy pomocy znaku . czyli kropki. Poniżej znajduje się kilka przykładów jak łączyć ciągi.
Kod:
<?php
$zmienna 'Jestem '.'sobie'.' zmienna';

echo $zmienna;
?>
Kod:
<?php
$x1 'soczek';
$x2 'warzywa';
$zmienna 'Lubię '.$x1.' i '.$x2;

echo $zmienna;
?>
Kod:
<?php
$x1 'soczek';
$x2 'warzywa';
$zmienna 'Lubię ' $x1 ' i ' $x2// spacje "zwiększające" czytelność kodu

echo $zmienna;
?>

Referencje

Referencja jest mechanizmem ułatwiającym nam operowanie na kilku zmiennych jednocześnie.
Kod:
<?php
$x 10;
$y 10;
?>
Przeanalizujmy powyższy kod. Tworzymy zmienna $x o wartości 10 oraz zmienna $y także o wartości 10. Możemy zrobić to także w inny sposób.
Kod:
<?php
$x 10;
$y $x// przypisujemy zmiennej $y wartość pochodzącą od zmiennej $x
?>
Naturalnie za każdym tworzymy kolejny obiekt. Możemy także lekko zoptymalizować ten proces robiąc cos w tym stylu:
Kod:
<?php
$x $y 10;
?>
Przechodząc do sedna sprawy miesimy zająć się referencją. Oto i ona.
Kod:
<?php
$x 10;
$y = &$x;

// operacja na referencji
$y 5;

echo '$x = '.$x.', $y = '.$y;
?>
Jak zauważyliście obie zmienne maja wartość 5 mimo, że tylko jednej zmienialiśmy wartość. Na tym polega referencja.

Klamerki w ciągach

Kod:
<?php
// Troszke mało logiczne pod względem gramatyki polskiej ale liczy się przykład

$smak "pomarańczy"// Czy powinienem robić tutaj kryptoreklame?

echo "Jasio lubi smak $smak'y"// Znak ' jest niedozwolonym znakiem w nazewnictwie zmiennej dlatego tez zostanie zignorowany przy interpretacji nazwy zmiennej
echo "<br />";
echo "Siostra Jasia bardzo lubi smak $smaki"// Nie zadziała bo parser PHP będzie szukał zmiennej $smaki
echo "<br />";
echo "Jasio zasmakował ${smak}y";
echo "<br />";
echo "Jasio delektuje się smakiem {$smak}y";
?>
Tak więc używając klamer PHP nie musimy wyłamywać się z konstrukcji ciągu. Ostatecznie dla czytelności mogliśmy zrobić to w ten sposób:
Kod:
<?php
$smak "pomarańczy"// Czy powinienem robić tutaj kryptoreklame?

echo "Siostra Jasia bardzo lubi smak ".$smak?>

Składnia heredoc

Składnia ta została dodana do PHP w wersji 4. Proszę pamiętać, że zmienne wewnątrz składni są parsowane tzn. zamieniane na ich wartości.
Kod:
<?php
$ciag = <<<EOT
To jest przykładowy ciąg
posiadający wiele linii
używający składni heredoc.
EOT;

echo $ciag;
?>

Zmienne zmiennych

Kod:
<?php
$autor "CapaciousCore";
$nazwa_zmiennej "autor";

echo $$nazwa_zmiennej// Zwróć uwagę na podwójnego dolara
?>
Jak widzicie możemy odwołać się do zmiennej, której nazwa jest zawartością innej zmiennej. Brzmi nieco jak masło maślane lecz czasami jest to przydatna cecha gdy odwołujemy się np. do nazw funkcji.