Konstrukcje jezykowe
Konstrukcje językowe są elementami wbudowanymi w język, dlatego też kierują się specjalnymi regułami. Najbardziej znaną konstrukcją jest prawdopodobnie echo, służące do wypisywania tekstu na ekran. Należy sobie zdać sprawę, że echo nie jest funkcją, dlatego nie zwraca żadnej wartości. Alternatywnie można skorzystać z print, która, mimo tego że jest również konstrukcją językową, to posiada pewne cechy funkcji – zwraca wartość oraz może być użyta jako część wyrażenia.
echo i print
int print (string $arg)
Jako że nie jest to funkcja, argument $arg można przekazać także bez nawiasów (co tak naprawdę jest zalecane). print() zawsze zwraca w wyniku swojego działania wartość 1.
void echo (string $arg1 [, string $...])
Jak widać echo różni się nieco od swojej kuznki print. Po pierwsze nie zwraca żadnej wartości. Po drugie, nie zawsze można je użyć jako część wyrażenia. Np.
$a = print 'Foo'; // zapis poprawny, wyświetli: Foo $b = echo 'Bar'; // błąd składni
die() i exit()
Inną ważną konstrukcją językową jest die(), będąca tak naprawdę aliasem dla exit().void die ([string $status])
void exit (int $status)
Powoduje ona przerwanie wykonywania skryptu. Opcjonalnie można podać jej jako argument komunikat, który ma być wypisany zaraz przed zakończeniem, lub liczbę całkowitą (tzw. status wyjściowy programu), która nie zostanie wyświetlona na ekranie, ale zostanie przekazana do procesu, który wywołał nasz skrypt.
void exit (int $status)
array()
Programując aplikacje internetowe niejednokrotnie natrafisz na konieczność użycia tablicy. Jednym ze sposobów stworzenia takowej jest kolejna konstrukcja – array(). Zwraca ona tablicę z podanych parametrów.array array ([mixed $...])
A oto przykład użycia tej konstrukcji:
$myTable = array("a", "b", "c", "d", "e"); print_r($myTable);
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
)
Zauważ, że mimo tego, iż nie podaliśmy indeksów tablicy, PHP domyślnie zrobił to za nas. Jak zdefiniować swoje własne indeksy? Poprzez podanie do array() pary: klucz => wartość, czyli:
$myTab = array(1 => 1, 2 => "drugi", 3=>244, 4=>"czwarty", 54, "php","moja_nazwa" => "wartosc",1299 => 65, 34, "moja_nazwa"=>100); print_r($myTab);
Array
(
[1] => 1
[2] => drugi
[3] => 244
[4] => czwarty
[5] => 54
[6] => php
[moja_nazwa] => 100
[1299] => 65
[1300] => 34
)
Jest tu kilka ciekawostek. Po pierwsze, przypatrz się dokładnie w jaki sposób PHP indeksuje elementy tablicy, gdy klucze nie są jawnie podane. Zaczynamy od klucza 1, któremu przypisujemy wartość 1. Później jest drugi, trzeci i czwarty klucz wraz z odpowiadającymi im wartościami. Natomiast piąty element podany w array() jest bez klucza. Biorąc pod uwagę, że tablica jest indeksowana od zera (nie od jeden!), natomiast my zaczęliśmy od indeksu numer 1, więc przed jedynką mamy w pewnym sensie wolne miejsce. Co zrobi PHP? Jak widać, tworzy sobie kolejny klucz, ale o wartości 5. Tak, tak. Podczas tworzenia domyślnych kluczy numerycznych PHP sprawdza wartość największego klucza, dodaje do niego wartość jeden i tworzy indeks o powstałym numerze. Widać to dobrze później. Dla elementu o wartości 65 ustalamy indeks 1299, następny element, któremu nie przypisujemy jawnie klucza, ma indeks 1300.
Zwróć jeszcze uwagę, że przy podaniu dwóch takich samych kluczy, wartość poprzednia jest nadpisywana (vide klucz „moja_nazwa”).
Nie będę się tu na razie więcej rozpisywał, gdyż tablice to tak obszerny temat, że szczegółowo zostaną omówione w osobnym rozdziale poświęconym tylko i wyłącznie im.
isset()
Jedną z najbardziej przydatnych konstrukcji językowych jest isset()bool isset (mixed $var [, mixed $var1 [, $... ]])
Służy ona do sprawdzania, czy zmienna jest zainicjowana. Zwraca FALSE jeśli zmienna ma wartość NULL. Więcej o sprawdzaniu wartości zmiennych napiszę w osobnym wpisie Porównywanie i sprawdzanie wartości zmiennych, bo myślę, że jest to dość ważna sprawa i wcale nie taka prosta, jakby się mogło wydawać.
Jak widać, do isset() można przekazać więcej niż jeden parametr. isset() zwróci TRUE tylko wtedy, kiedy wszystkie przekazane wartości będą ustawione.
Jako że jest to konstrukcja językowa, a nie funkcja, trzeba pamiętać, że nie można się do niej odnieść za pomocą zmiennej. Np.
$a = 5; $b = "isset"; $b($a); // wyświetli komunikat o błędzie: "Fatal error: Call to undefined function isset()..."
empty()
Podobne zastosowanie do powyższej ma konstrukcja empty(). Jak sama nazwa wskazuje, sprawdzamy nią czy zmienna jest pusta. Mogłoby się wydawać, że jest ona przeciwieństwem isset(), tak jednak nie jest, o czym więcej powiem w Porównywaniu i sprawdzaniu wartości zmiennych.bool empty (mixed $var)
Można powiedzieć natomiast, że empty() jest przeciwieństwem boolowskiego if($var).
Oto list wartości, które są postrzegane jako puste (czyli dla których empty() zwróci TRUE):
„” lub ” (pusty string)
0 (0 jako int)
„0″ (0 jako string)
NULL
FALSE
array() (pusta tablica)
var $var (zmienna zadeklarowana, ale bez żadnej przypisanej wartości)
Uwaga dla tych, którzy orientują się już co nieco w programowaniu obiektowym. Od PHP 5 obiekty nieposiadające żadnych właściwości nie są postrzegane jako puste.
list()
Ciekawą i również w niektórych sytuacjach przydatną konstrukcją jest list():array list (mixed $varname [, mixed $...])
Używana jest do przypisania kilku zmiennych w jednej operacji.
$info = array('coffee', 'brown', 'caffeine'); list($drink, $color, $power) = $info; echo "$drink is $color and $power makes it special."; // wyświetli: coffee is brown and caffeine makes it special. // można też użyć list() do przypisania tylko kilku zmiennych list($drink, , $power) = $info; echo "$drink has $power."; // wyświetli: coffee has caffeine
include, require, include_once i require_once
Czasami zachodzi potrzeba dołączenia do skryptu jakiegoś zewnętrznego pliku. W tym wypadku z pomocą przychodzą nam aż cztery konstrukcje działające bardzo podobnie. Są to: include, include_once, require i require_once. Jak jest różnica między include a require? Taka sama jak między include_once, a require_onceeval()
mixed eval (string $code_str)
Konstrukcja eval() traktuje łańcuch znakowy jak kod PHP i wykonuje go. Jest to przydatne w przypadku kiedy np. przechowujemy w bazie danych kod do późniejszego wykonania w postaci tekstu.
Przykład działania:
$a = 5; $b = 1; eval('if($b == 1) $a = 10;'); echo $a; // wypisze: 10
return
Jeśli return zostanie wywołane z wnętrza funkcji, konstrukcja natychmiastowo przerwie jej działanie i zwróci wartość podaną w argumencie. return kończy również wykonywanie instrukcji eval(), lub ogólnie skryptu. Przykład return w funkcji:function myFoo() { // jakieś operacje return 5; // wszystkie operacje napisane poniżej return nie zostaną wykonane }
// jakieś operacje return 0; // jakieś inne operacje - nie zostaną wykonane
$a = include 'bar.php';
// cośtam sobie robimy... return 10;
function myFoo() { return $a['foo'] = 'bar'; } $a = myFoo(); var_dump($a);
string(3) "bar"
Anty-sort, czyli robienie bałaganu w tablicy Tablice jako stosy, kolejki lub zbiory #1
One Response to “Konstrukcje jezykowe”