PHP/Zmienne i tablice: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Zyx (dyskusja | edycje)
korekta formatowania kodu i drobne stylistyczne
Zyx (dyskusja | edycje)
m dodanie numerowania linii
Linia 62:
Pamiętaj, że PHP potrafi automatycznie rozpoznawać typ wyrażenia i w razie potrzeby odpowiednio go konwertować. Dla przykładu instrukcja ''echo'' wymaga danych tekstowych. W skrypcie:
 
<source lang="php" line><?php
echo 7;
</source>
Linia 72:
Informatyka wiele zawdzięcza matematyce. W programowaniu występuje wiele pojęć zaczerpniętych bezpośrednio od królowej nauk. Jednym z nich jest funkcja, do której możemy wprowadzać parametry, a w zamian otrzymujemy jakiś wynik. Poniższy skrypt będzie pierwszym "naprawdę" dynamicznym, jaki stworzymy. Skorzystamy w nim z dwóch funkcji, aby wyświetlić aktualny czas:
 
<source lang="php" line><?php
 
echo 'Dzisiaj mamy: '.date('d.m.Y').'<br/>';
Linia 98:
Aby przypisać wartość do zmiennej, należy ułożyć wyrażenie z operatorem '''='''. Po lewej stronie umieszczamy naszą zmienną, a po prawej inne wyrażenie określające wstawianą wartość. Oto, jak wygląda to w praktyce:
 
<source lang="php" line><?php
 
// inicjujemy zmienna $czas aktualnym czasem w sekundach od 1.1.1970
$czas = time();
Linia 112 ⟶ 111:
PHP, w przeciwieństwie do innych języków programowania, ma bardzo liberalne reguły stosowania zmiennych. W ogóle nie trzeba ich nigdzie deklarować, a interpreter sam na bieżąco dopasuje typ informacji do naszych potrzeb. Dana zmienna jest tworzona podczas pierwszego jej wykorzystania w skrypcie. Jest sporo sytuacji, w których zachowanie to jest pożądane, lecz normalnie może utrudnić ono pracę. Wyobraź sobie taką sytuację: programista potrafi najczęściej bardzo szybko pisać i od czasu do czasu zdarza mu się wcisnąć dwa klawisze w złej kolejności. Powstaje literówka. Jeżeli zostanie ona popełniona podczas wpisywania nazwy, PHP w teorii nie zgłosi tego jako błędu i programista będzie musiał spędzić dużo czasu na jej odnalezienie. Słowo "teoria" nie znalazło się tu przypadkowo. Podczas instalowania PHP wspominaliśmy o poziomach raportowania błędów. Im wyższy poziom, tym większej ilości rzeczy czepia się PHP. Na poziomie ''E_ALL'' zdefiniowanym w rekomendowanym pliku ''php.ini'' takie beztroskie podejście do zmiennych nie jest tolerowane. Tutaj PHP wymaga już, aby podczas pierwszego użycia zmiennej została jej przypisana jakaś wartość, ponieważ inaczej otrzymamy powiadomienie (ang. ''notice'') o próbie odwołania się do nieistniejącej zmiennej. Popatrzmy sobie na ten przykład:
 
<source lang="php" line><?php
 
echo $a * 16 + 5;
Linia 123 ⟶ 122:
Sytuację można rozwiązać, ręcznie inicjując zmienną <code>$a</code> wartością 0:
 
<source lang="php" line><?php
$a = 0;
echo $a * 16 + 5;
Linia 132 ⟶ 131:
Początkujący programiści mają tendencję do tworzenia dużej liczby tzw. ''zmiennych tymczasowych'', które nie wnoszą absolutnie niczego do programu poza wydłużeniem kodu i zmniejszeniem wydajności. Po każdym etapie przetworzenia jakiejś informacji, umieszczana jest ona w nowej zmiennej. Takie podejście jest nieprawidłowe. Oto przykłady "złych" skryptów:
 
<source lang="php" line><?php
 
$tekst = 'To jest jakiś tekst';
Linia 142 ⟶ 141:
Przykład 2:
 
<source lang="php" line><?php
 
$format = 'd.m.Y';
Linia 150 ⟶ 149:
W pierwszym skrypcie niepotrzebnie po każdym etapie przetwarzania tekstu tworzymy dla niego nową zmienną. Możemy to poprawić na dwa sposoby. Pierwszy:
 
<source lang="php" line><?php
 
$tekst = 'To jest jakiś tekst';
Linia 160 ⟶ 159:
Drugi, w którym w ogóle opuszczamy zmienne:
 
<source lang="php" line><?php
echo addslashes(strtolower('To jest jakiś tekst'));
</source>
Linia 166 ⟶ 165:
W drugim "złym" skrypcie w ogóle niepotrzebnie tworzymy zmienną; przecież format daty możemy wpisać bezpośrednio do funkcji.
 
<source lang="php" line><?php
echo date('d.m.Y');
</source>
Linia 182 ⟶ 181:
Pierwszym typem skalarnym jest ''liczba całkowita''. Jej angielskim określeniem jest ''integer'' albo ''int''. Może być ona zapisana w trzech systemach liczbowych: dziesiętnym, szesnastkowym albo ósemkowym:
 
<source lang="php" line><?php
$a = 1234; // liczba całkowita
$a = -123; // liczba całkowita ujemna
Linia 191 ⟶ 190:
Możemy także korzystać z wartości ułamkowych zwanych ''liczbami zmiennoprzecinkowymi'' (ang. ''floating point numbers'' albo skrótowo ''float''), które są przybliżeniem liczb rzeczywistych. Przy ich zapisywaniu obowiązują reguły języka angielskiego, więc części całkowite od ułamkowych oddzielamy za pomocą kropki. Także i tu mamy do wyboru kilka sposobów zapisu:
 
<source lang="php" line><?php
$a = 1.234;
$a = 1.2e3;
Linia 201 ⟶ 200:
Ostatnim z typów skalarnych jest ciąg tekstowy (ang. ''string''). Zdążyliśmy już powiedzieć nieco o nim, np. że istnieją dwie składnie zapisywania ciągów. Ta oparta na apostrofach posiada minimalny zestaw kodów formatujących pozwalających na wstawienie do tekstu innych apostrofów oraz ukośników wstecznych:
 
<source lang="php" line><?php
echo 'To jest tekst zapisany w apostrofach. Kody formatujące pozwalają
umieścić w tekście wyłącznie inne apostrofy: \' albo backslashe: \\. Wszystko inne,
Linia 209 ⟶ 208:
Uruchom powyższy skrypt i porównaj sobie wynik z przeglądarki z treścią wpisaną w apostrofy. Spróbuj usunąć backslash sprzed apostrofu i zobacz, co się stanie. Skrypt się nie uruchomi, ponieważ wystąpił błąd składni. PHP myśli, że tekst kończy się już tutaj i dalej jest inna część algorytmu, co nie jest oczywiście prawdą. Więcej możliwości formatowania posiada tekst ograniczony cudzysłowami:
 
<source lang="php" line><?php
echo "To jest tekst zapisany w cudzysłowach. Za pomocą kodów formatujących możemy
umieszczać wiele rzeczy: \" \\ \n \r \$";
Linia 216 ⟶ 215:
Cudzysłowy zezwalają na "proste" umieszczanie w nich wartości zmiennych (zm. tymczasowa stworzona dla zilustrowania zagadnienia):
 
<source lang="php" line><?php
$czas = time();
echo "Aktualny czas w sekundach: $czas sek.";
Linia 223 ⟶ 222:
Jednak nie nadużywaj tego. Wstawianie zmiennych w ten sposób jest kilka razy wolniejsze, niż łączenie ich z ciągiem operatorem kropki.
 
<source lang="php" line><?php
// mozna takze użyć apostrof
echo "Aktualny czas w sekundach: ".time()." sek.";
Linia 230 ⟶ 229:
Niektórzy początkujący programiści niezbyt rozumieją ideę tej możliwości i próbują wykorzystywać ciągi do wprowadzania wartości zmiennych jako parametrów do funkcji (zm. tymczasowa użyta dla zilustrowania zagadnienia):
 
<source lang="php" line><?php
$formatDaty = 'd.m.Y';
echo date("$formatDaty");
Linia 248 ⟶ 247:
Przyjrzyjmy się wspomnianemu w trzecim punkcie poleceniu. Czasem jakąś zmienną trzeba zniszczyć. Najlepiej nadaje się do tego polecenie <code>unset()</code>:
 
<source lang="php" line><?php
$zmienna = 4856;
 
Linia 264 ⟶ 263:
Możemy sami wymusić konwersję typów:
 
<source lang="php" line><?php
// wyświetl liczbę całkowitą jako ułamek
echo (float) 10;
Linia 273 ⟶ 272:
PHP posiada funkcję <code>gettype()</code> zwracającą nazwę aktualnego typu danych zawartych w zmiennej:
 
<source lang="php" line><?php
$a = 547;
echo 'Typ zmiennej $a to: '.gettype($a);
Linia 343 ⟶ 342:
Zwróć uwagę na cztery ostatnie pozycje. Wyszczególnione zostały tam tzw. operatory jednoargumentowe, czyli takie, które operują wyłącznie na jednym wyrażeniu. W dodatku koniecznie musi być ono zmienną, ponieważ modyfikują one jej wartość, powiększając lub zmniejszając o jeden. Każdy z tych operatorów został podany podwójnie, ponieważ w zależności od tego, czy postawimy go przed, czy po zmiennej, otrzymamy nieco inne rezultaty. Porównaj:
 
<source lang="php" line><?php
// najpierw składnia $zmienna++
 
Linia 372 ⟶ 371:
Zajmijmy się teraz przypisywaniem danych do zmiennej. Wiemy już, że operator przypisania po lewej stronie wymaga zmiennej, po prawej wyrażenia, którego wartość trzeba w niej umieścić. Skoro operator, jest to też wyrażenie, lecz jaką wartość ono reprezentuje. Okazuje się, że tę, która jest przypisywana. Możemy wobec tego zastosować sprytną sztuczkę, o której wbrew pozorom wie niezbyt wielu programistów. Zainicjujmy pięć zmiennych naraz tą samą wartością:
 
<source lang="php" line><?php
$a = $b = $c = $d = $e = 5;
</source>
Linia 420 ⟶ 419:
Te operatory po prostu skracają zapis i czynią go czytelniejszym. Warto o nich pamiętać szczególnie przy operacjach na ciągach tekstu, kiedy nasz algorytm składa jakąś treść, doczepiając kolejne jej partie do wybranej zmiennej:
 
<source lang="php" line><?php
 
$tekst = 'Litwo, ojczyzno moja! Ty jesteś jak zdrowie<br/>';
Linia 475 ⟶ 474:
Wiemy już, że tablica jest zmienną, która grupuje sobie mniejsze zmienne opisywane przez ich indeksy (wartości ''x'' w naszej tabelce funkcji). Najważniejsze jest jednak to, że przy odwoływaniu się do nich, potrzebny nam indeks możemy określić zwyczajnym wyrażeniem! To oznacza, że zadanie wymienione akapit wyżej staje się realne. Zanim je zaprogramujemy, nieco informacji o składni tablic. Na początek utwórzmy pustą tablicę:
 
<source lang="php" line><?php
$tablica = array();
</source>
Linia 481 ⟶ 480:
Spróbujmy wprowadzić do niej wartości naszej funkcji:
 
<source lang="php" line><?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
</source>
Linia 487 ⟶ 486:
Początkowe "0" określa, od jakiej liczby zacząć numerowanie kolejnych elementów. Po strzałce wymieniamy ich wartości oddzielone przecinkiem. Teraz spróbujmy dostać się do jakiejś z nich.
 
<source lang="php" line><?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
echo 'Pod numerem 5 kryje się wartość '.$tablica[5];
Linia 494 ⟶ 493:
Pomiędzy nawiasami kwadratowymi wprowadzić musimy wyrażenie określające indeks tablicy, który chcielibyśmy odczytać. Możemy teraz pokusić się o napisanie skryptu losującego elementy:
 
<source lang="php" line><?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
echo 'Pod numerem 5 kryje się wartość '.$tablica[rand(0, 8)];
Linia 503 ⟶ 502:
Indeksy tablicy wcale nie muszą być numeryczne. PHP dopuszcza także tekstowe wersje. Mamy wtedy do czynienia z tablicami asocjacyjnymi.
 
<source lang="php" line><?php
$artykul = array(
'tytul' => 'Tytuł artykułu',
Linia 517 ⟶ 516:
Mogą istnieć także tablice mieszane, w których występują zarówno indeksy tekstowe, jak i numeryczne. Pamiętaj, że każdy element tablicy zachowuje się, jak zwykła zmienna, dlatego także możesz przypisywać do niego dowolne wartości już po utworzeniu tablicy.
 
<source lang="php" line><?php
 
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);
Linia 533 ⟶ 532:
Zobacz teraz, jak zachowuje się <code>$tablica</code>, kiedy próbujemy ją wywołać samodzielnie:
 
<source lang="php" line><?php
$tablica = array(0 => 5, 3, 8, 7, 9, 24, 15, 2, 19);