😎 » PHP - FAQ » Наслідування та видимість в PHP
91 0  

Наслідування та видимість в PHP

Область видимості, в PHP, змінної – це контекст, у якому ця змінна визначена, область видимості охоплює також файли, що включаються (include) і  (require).

fellow Беріть карвалол, або покуріть і лише після цього посинайте читати далі.

$a = 1; // Видно в усьому документі крім  тіла функцій та класів
function test()
{
    $b= 4; // змінну видно тільки у функції test
   echo $a; // змінну "а" не видно тому що вона за межами функції
}
function test2()
{
   global: a;
     echo $a; // тепер змінна "а" = 1.
}
function test3($a) - // Можна передати глобальну змінну в середену функції через її тіло
{
     echo $a; // тепер змінна "а" = 1.
}

belay Є лише один спосіб заставити змінну стати СУПЕРГЛОБАЛЬНОЮ - бути видною усюди, прописавши глобальність лише 1 раз: це використання  спеціального PHP масиву $GLOBALS.

$GLOBALS - це асоціативний масив, ключем якого є ім'я, а значенням - вміст глобальної змінної.
$a = 1;
$b = 2;
function Sum()
{
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; //тепер видно в середині функції або метода класу.
}

В будь-якій точці також видно такі суперглобальні змінні:

  • $_SERVER
  • $_GET
  • $_POST
  • $_SESSION
  • $_COOKIE
  • $_FILES
  • $_ENV
  • $_REQUEST

Статичні змінні.

function foo() {
    static $int = 1;          // вірно
    static $int = 1+2;        // вірно
    static $int = sqrt(121);  // невірно (так як це функція)

    $int++;
    echo $int; // змінна $int ЗАВЖДИ = 1 - так як вона статична і не може міняти свого значення яке призначили перший раз.
} 

Статичним змінним можна присвоїти значення, що є результатом виразу, але не можна використовувати для цього функцію, так це викликає помилку аналізу. Починаючи з PHP 8.1.0, коли метод, що використовує статичні змінні, успадковується (але не перевизначається), успадкований метод тепер використовуватиме статичні змінні спільно з батьківським методом. Це означає, що статичні змінні в методах тепер поводяться так само, як і статичні властивості.

winked Якщо Ви дочитали до цього місця і Вам все зрозуміло по області видимості зміних - то тепер варто випити щось міцнішого бо тут без 100 гр.  уже не розібратись.

Видимість в Класах PHP.

1. Наслідування.

Приклад 1.1 Якщо потрібно прочитати метод із батьківського класу + врахуємо видимість самих змінних:

    $myVar = 6; // Даємо змінні  - myVar- присвоюємо значення 6
    $w = 5;

    class A {
        public function summ(){
            $b = $GLOBALS['myVar']; // Читаємо глобальний масив $GLOBALS і дістаємо звідти зміну - myVar
            $c = 4;
            return $b+$c;
        }
    }

    class B extends A {
        public function twoSumm(){
            global $w; // Робимо змінну - w - видимою у методі
            $t = (new A())->summ(); // зчитуємо значення із батьківського метода
            return $w + $t;
        }
    }
    $x = new B; // Створюємо обєкт з класу - В
    $z = $x->twoSumm(); // ДІстаємо значення методу - twoSumm
    echo $z; // Спробуйте підрахувати суму самі - відповідь під цим блоком


Залишити свій коментар:

Досвід у веброзробці:

2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2009
2023