Junior
Jakie są zakresy widoczności zmiennych w PHP?
sobes.tech AI
Odpowiedź od AI
- Globalne: Zmienne zadeklarowane poza funkcjami lub klasami są dostępne w zakresie globalnym. Wewnątrz funkcji należy się do nich odwołać za pomocą słowa kluczowego
globallub tablicy superglobal$GLOBALS. - Lokalne: Zmienne zadeklarowane wewnątrz funkcji są dostępne tylko w tej funkcji.
- Statyczne: Zmienne zadeklarowane słowem kluczowym
staticwewnątrz funkcji zachowują swoją wartość między wywołaniami. - Parametry funkcji/metody: Parametry przekazywane do funkcji lub metody są dostępne tylko wewnątrz tej funkcji/metody jako zmienne lokalne.
- Właściwości klasy: Właściwości klasy (zadeklarowane z modyfikatorami
public,protected,private) są dostępne w kontekście obiektu tej klasy.
<?php
// Zakres globalny
$globalVar = 'Jestem globalny';
function testScope() {
// Zakres lokalny
$localVar = 'Jestem lokalny';
// Dostęp do zmiennej globalnej za pomocą słowa kluczowego global
global $globalVar;
echo $globalVar . "\n";
// Dostęp do zmiennej globalnej za pomocą $GLOBALS
echo $GLOBALS['globalVar'] . "\n";
echo $localVar . "\n";
// echo $staticVar; // Błąd: niezdefiniowana zmienna
}
function testStatic() {
// Zakres statyczny
static $staticVar = 0;
$staticVar++;
echo "Zmienna statyczna: " . $staticVar . "\n";
}
function testParameters($param) {
// Zakres parametru
echo "Parametr: " . $param . "\n";
}
testScope();
testStatic(); // Wynik: Zmienna statyczna: 1
testStatic(); // Wynik: Zmienna statyczna: 2
testParameters('Cześć');
class MyClass {
public $publicProperty = 'Jestem publiczny';
protected $protectedProperty = 'Jestem chroniony'; // Dostępne w klasie i podklasach
private $privateProperty = 'Jestem prywatny'; // Dostępne tylko w klasie
public function accessProperties() {
echo $this->publicProperty . "\n";
echo $this->protectedProperty . "\n";
echo $this->privateProperty . "\n";
}
}
$obj = new MyClass();
$obj->accessProperties();
// echo $obj->privateProperty; // Błąd: prywatna właściwość
?>