Можете объяснить, как работает этот код?

220
23 августа 2017, 18:53

Можете объяснить, как работает этот PHP код?

if( true ){
    qwe::$e = 3;
}
class qwe {
    static public $e = 2;
    static function asd(){
        echo qwe::$e;
    }
}
print_r(qwe::$e);
qwe::asd();

Результат: 33.

Разве можно обращаться к класу перед объявлением? И почему не переопределилась переменная в классе?

Answer 1

Статичному свойству $e присваивается значение 3, потом два раза это значение выводится на экран.

Answer 2

Так как класс является статическим и/или в нём присутствуют статические переменные - то можно.

Если у Вас обычный класс без каких-либо статических данных, к которым можно получить доступ через :: - то тогда нужно создавать новый экземпляр класса и через магические методы уже "стучать". Вот небольшой пример:

class A {
    protected $foo = 'bar';
    public function __get($name){
        return $this->{$name};
    }
}
class B {
    static $foo = 'bar';
}
var_dump((new A())->__get('foo') == B::$foo); // Даст True

Только для доступа в новом экземпляре надо будет переопределить магический метод и сделать проверку на то, существует ли переменная.

READ ALSO
Заблокировать доступ к папке№!

Заблокировать доступ к папке№!

Как мне заблокировать доступ к папке если в ней нету нужного аргумента?Например wwwsite

231
Не работает JS скрипт после редиректа

Не работает JS скрипт после редиректа

Имеется страница на OpenServerНа этой странице есть форма, после отправки которой выполняются некоторые манипуляции с базой данных

278
yandex php парсинг

yandex php парсинг

Доброго времени суток, если через curl зайти на wordstat или direct, то он запрашивает логин и парольВопрос такой: как отправить яндексу логин и пароль...

289
PHP Parse error: syntax error, unexpected '$db' [требует правки]

PHP Parse error: syntax error, unexpected '$db' [требует правки]

Поставьте запятую перед $db и замените после него db1 на $db1И возможно $$area надо заменить на $area

219