Назад к вопросам
Junior
86
questionbank
Какие существуют области видимости переменных в PHP?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
- Global: Переменные, объявленные вне функций или классов, доступны в глобальном скопе. Внутри функций к ним нужно обращаться через ключевое слово
globalили суперглобальный массив$GLOBALS. - Local: Переменные, объявленные внутри функции, доступны только внутри этой функции.
- Static: Переменные, объявленные с ключевым словом
staticвнутри функции, сохраняют свое значение между вызовами этой функции. - Function/Method parameters: Параметры, передаваемые в функцию или метод, доступны только внутри этой функции/метода как локальные переменные.
- Class properties: Свойства класса (объявленные с модификаторами
public,protected,private) доступны в контексте объекта этого класса.
<?php
// Global scope
$globalVar = 'I am global';
function testScope() {
// Local scope
$localVar = 'I am local';
// Accessing global variable using global keyword
global $globalVar;
echo $globalVar . "\n";
// Accessing global variable using $GLOBALS
echo $GLOBALS['globalVar'] . "\n";
echo $localVar . "\n";
// echo $staticVar; // Error: undefined variable
}
function testStatic() {
// Static scope
static $staticVar = 0;
$staticVar++;
echo "Static variable: " . $staticVar . "\n";
}
function testParameters($param) {
// Parameter scope
echo "Parameter: " . $param . "\n";
}
testScope();
testStatic(); // Output: Static variable: 1
testStatic(); // Output: Static variable: 2
testParameters('Hello');
class MyClass {
public $publicProperty = 'I am public';
protected $protectedProperty = 'I am protected'; // Accessible within the class and subclasses
private $privateProperty = 'I am private'; // Accessible only within the class
public function accessProperties() {
echo $this->publicProperty . "\n";
echo $this->protectedProperty . "\n";
echo $this->privateProperty . "\n";
}
}
$obj = new MyClass();
$obj->accessProperties();
// echo $obj->privateProperty; // Error: Cannot access private property
?>