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

Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
popr. nawigacji, poszerzenie przykładu, uzupełnienia (częściowo)
Lethern (dyskusja | edycje)
poprawki treści, uproszczenie języka itp.
Linia 80:
 
Powyższy kod zachowa się następująco:
# Wykonana zostanie funkcja date(), przyjmującaprzyjmując za argument tekst 'd.m.Y', a jej wynikiem będzie aktualna data.
# Następnie powyżej opisany wynik zostanie połączony (operator .) z sąsiednimi tekstami, przez co powstanie wyrażenie, np. "Dzisiaj mamy: 01.01.2010". ''Echo'' spowoduje wstawienie tego wyrażenia do kodu HTML strony wynikowej.
# Następna linijka wywoła się analogicznie, wywołanie funkcji zakończy się zwróceniem wyniku, który zostanie połączony z sąsiednimi wyrażeniami w jeden tekst.
 
Linia 96:
Przykłady nieprawidłowych nazw:
 
<font color="red">$5a, $'a', $</font>
$5a, $
 
{{Infobox|PHP zezwala na używanie w nazwach zmiennych także znaków o kodach od 128 do 255, wśród których znajdują się m.in. polskie litery.}}
Linia 112:
</source>
 
W powyższym przykładzie stworzyliśmy zmiennązmienne <code>$czas</code> i $czas2, wprowadzajączapisując dow niejpierwszej aktualnyz nich czasliczbę sekund zwróconą przez wywołanie funkcji time(). Następnie wykorzystaliśmy ją w obliczeniach w kolejnej linijce. Poznaliśmy w ten sposób jedno z zastosowań zmiennych. Zachowaliśmy w nich wynik działania jednej sekcji programu, aby potem używać go wielokrotnie gdzie indziej, bez konieczności każdorazowego odwoływania się do funkcji i zbędnego liczenia po sto razy tego samego. Wprawdzie pobieranie aktualnego czasu nie jest czasochłonną operacją, ale na razie jesteśmy jeszcze na początkowym etapie nauki i musimy dbać o prostotę przykładów.
 
PHP, w przeciwieństwie do innych języków programowania, ma bardzo liberalne reguły stosowania zmiennych. W ogóle nieNie trzeba ich nigdzie uprzednio deklarować, a interpreter sam na bieżąco dopasuje typrodzaj informacji do naszych potrzeb (ustali tzw. typ zmiennej). 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 też utrudnić ono pracę. WyobraźAby mieć świadomość zagrożenia, wyobraź sobie taką sytuację: programista potrafi najczęściej bardzopisząc szybko, pisaćmoże ipopełnić odliterówkę. czasuJeżeli dozostanie czasuona zdarzapopełniona mupodczas sięwpisywania wcisnąćnazwy, dwaPHP klawiszeutworzy wzmienną złejzawierającą kolejnościtę literówkę. PowstajeW literówka.teorii Jeżelinie zostaniejest onato popełnionażadnym podczasbłędem, wpisywaniajednak możemy nazwysię domyślać, PHPże wzapis teoriiobliczeń niedo zgłosiinnej tegozmiennej jakospowoduje błędubłędne idziałanie programu, a programista będzie musiał spędzić dużo czasu na jej odnalezienie przyczyny. 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
Linia 121:
</source>
 
Zmienna <code>$a</code> nie została tuw wcześniejtym zadeklarowanakodzie nigdzie początkowo adeklarowana. Otwórz swój plik ''php.ini'', odnajdź dyrektywę ''error_reporting'' i zmień jej wartość na <code>E_ALL | ~E_NOTICE</code>. Wyłączysz w ten sposób wyświetlanie powiadomień. Zrestartuj serwer i uruchom powyższy skrypt. Wynikiem powinno być "5". PHP bez pytania podstawił do <code>$a</code> wartość neutralną 0. Przywróć teraz poprzedni poziom (''E_ALL | E_STRICT'') i ponownie uruchom ten skrypt. Oprócz wyniku, ujrzysz też komunikat:
 
Notice: Undefined variable: a in D:\Serwer\www\katalog\twojskrypt.php on line 3
Linia 162:
</source>
 
Drugi sposób rozwiązania tego problemu - bez użycia zmiennych (już trochę mniej czytelny):
Drugi, w którym w ogóle opuszczamy zmienne:
 
<source lang="php" line><?php
Linia 168:
</source>
 
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
Linia 174:
</source>
 
WJednak tymnie jednakzawsze przypadku może byćjest to uznane za kwestięlepsza dyskusyjnąwersja. Jeżeli nasz skrypt bardzo często będzie formatować różne daty, a my będziemy chcieli mieć możliwość jejzmieniania prostegotych konfigurowania,formatów wartow pokusićprzyszłości, sięużycie ozmiennych zapisaniebardzo formatuułatwiłoby wsprawę jakiejś- zmiennej.zmieniamy Wformat tendaty sposóbw poprzezjednej zmianęzmiennej, jej wartościzamiast w jednymkilku miejscuczy zostanie ona uwzględniona wkilkudziesięciu całymwywołaniach skrypciedate().
 
Nauczenie się, kiedy warto użyć zmiennych, a kiedy nie, to kwestia praktyki. W niniejszym podręczniku będziemy zwracali na tę kwestię baczną uwagę. Jeśli zajdzie potrzeba użycia zmiennych tymczasowych - wyjaśnimy, dlaczego, bowiem całkowite rezygnowanie z ich użycia także może rodzić wiele problemów.
 
=== Typy zmiennych ===
WDo sekcjitej poświęconejpory rodzajommiałeś danychokazję w PHP dowiedziałeś sięzauważyć, że istnieje w PHP pewne rozróżnienie na tekst i liczby. Skoncentrujemy się teraz na poznaniu większej ilości typów oraz pokazaniu, jak PHP dokonuje konwersji między nimi.
 
Istnieją trzy kategorie typów: ''wielkości skalarne'', ''typy złożone'' oraz ''typy specjalne''. Dokumentacja wymienia jeszcze jedną, lecz stworzoną na jej własne potrzeby do zaznaczania niektórych rzeczy. Powiemy(powiemy o niej później).
 
==== Wielkości skalarne ====
Pierwszym typem skalarnym jest ''liczba całkowita''. Jej angielskim określeniem jest ''integer'', alboużywany bywa skrót ''int''. Może być ona zapisana w trzech systemach liczbowych: dziesiętnym, szesnastkowym albo ósemkowym:
 
<source lang="php" line><?php
Linia 193:
</source>
 
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 (ważne - nigdy nie zawierają dokładnej wartości, prawie zawsze jest to odrobinę różniąca się liczba, dlatego mówi się o "przybliżeniu"). 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
Linia 201:
</source>
 
SpecjalnieKolejnym wyróżnionytypem został tzw.jest typ logiczny (''boolean''), przyjmujący jedynie wartości '''FALSE''' i '''TRUE'''. Jest on bardzoużywany ważny, ponieważprzez wiele funkcji generujedo właśniezwracania w nim rezultatrezultatu, czy operacja się powiodła. Wyrażenia porównawcze (czy równy, czy większy itd.) także generują wartości logiczne.
 
Ostatnim z typów skalarnych jest ciąg tekstowy (ang. ''string''). Zdążyliśmy już powiedziećwspomnieć nieco o nim, npm.in. żeo istniejąistnieniu dwiedwóch składnieskładni zapisywania ciągów. Ta oparta na apostrofach posiadadopuszcza minimalnymniejszy 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,
np. \n zostanie wyświetlone jako zwyczajny tekst, zamiast znaku nowej linii';
</source>
 
Uruchom powyższy skrypt, iaby porównajzobaczyć sobiejaki wyniktekst zzostanie przeglądarki z treścią wpisaną w apostrofywyświetlony. Spróbuj usunąć backslash sprzed apostrofu (w tekście: \') i zobacz, co się stanie. Skrypt się nie uruchomi, ponieważ wystąpił błąd składni. PHP myśli,napotka żew tekstsumie kończytrzy sięapostrofy, a więc jużmiędzy tutajdrugim i dalejtrzecim jestbędzie innanierozpoznany częśćdla algorytmuparsera tekst, conatomiast nietrzeci jestbędzie oczywiście prawdąniedomknięty. Więcej możliwości formatowania posiada tekst ograniczony cudzysłowami:
 
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: znak cudzysłowu \" backslash \\ znak nowej linii \n i inne: \t \r \$";
</source>
 
Cudzysłowy zezwalają na "proste" umieszczanie wwewnątrz nichtekstu wartości zmiennych, (zm.co tymczasowazilustrujemy stworzona dlaw zilustrowaniaprymitywnym zagadnienia)przykładzie:
 
<source lang="php" line><?php
Linia 225 ⟶ 227:
</source>
 
JednakWartym niezapamiętania nadużywajjest tego.fakt, Wstawianieże wstawianie zmiennych w ten sposób jest kilka razy wolniejsze, niż łączenie ich z ciągiem operatorem kropki.
 
<source lang="php" line><?php
// moznatutaj takzemożna użyć apostrofcudzysłowu jak i apostrofu
echo "Aktualny czas w sekundach: ".time()." sek.";
</source>
 
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
Linia 239 ⟶ 241:
</source>
 
UnikajPowinno się unikać takiej konstrukcji, jaki ognia. Choćchoć PHP ją akceptuje, nie jest to prawidłowe użycie tej struktury języka. Więcej...Co więcej, przy złożonych typach powoduje zniekształcenie danych. Jeżeli spotkasz kogoś piszącego w ten sposób, poinformuj go o tym.
 
==== Inne typy ====