Rozdział 3. ♦ Instrukcje sterujące i funkcje
Listing 3.27. Zasiąg zmiennych globalnych
<html>
<head>
<title>Przykladowa strona</title> </head>
<body>
<?php $a - 1:
function funkcjaO
echo("Wartość a = $a <br>");
funkcjaO;
echo("Wartość a = $a <br>"):
?>
</body>
</htm1>
Wykonanie tego skryptu wywoła efekt widoczny na rysunku 3.14 (pojawienie się informacji o niezdefiniowanej zmiennej jest zależne od konfiguracji środowiska PHP). Co się zatem stało? Zmienna a została zdefiniowana na początku skryptu i jest zmienną globalną. W funkcji funkcja próbujemy wyświetlić wartość tej zmiennej. Niestety zgodnie z tym, co zostało napisane powyżej, funkcje nie mają bezpośredniego dostępu do zmiennych globalnych, dlatego też instrukcja echo znajdująca się w funkcji nie zadziałała poprawnie. Z kolei druga instrukcja echo, ponieważ znajduje się poza funkcją i ma dostęp do zmiennych globalnych, działa zgodnie z oczekiwaniami.
Rysunek 3.14. Próba dostępu |
Pik Edycja ®dok Przejdź JakJadkl Narzędzia F |
'orot | ||
do zmiennej globalnej zakończyła się |
• g> Q |L1 uh |
/hdex.php |
d © | |
•< Roz, |
■oczni) przygód... r I- Aktualności |
miepowodzeniem
Notice: Undefined variable: a in E:\I\index.php on linę 10 Wartość a =
Wartość a = 1
Czy istnieje zatem możliwość dostępu do zmiennych globalnych wewnątrz funkcji? Oczywiście tak. Możemy to zrobić na dwa sposoby. Pierwszy to odwołanie się do zmiennej superglobalnej GLOBALS, drugi to użycie słowa kluczowego globals. Zobaczmy najpierw, jak będzie to wyglądało w drugim wymienionym przypadku. Odpowiedni kod został przedstawiony na listingu 3.28. Efekt jego działania jest natomiast widoczny na rysunku 3.15. Użycie wewnątrz funkcji instrukcji gl obal wogólnej postaci: global nazwa_zmiennej:
umożliwia wykorzystanie zmiennej globalnej wewnątrz funkcji. Jeśli mamy więcej zmiennych globalnych, które chcemy wykorzystać wewnątrz funkcji, możemy użyć konstrukcji:
global zmiennal. zmienna2. zmienna3: