Назад к вопросам
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
?>