Есть такой код:
<?php
class Base
{
public $user;
public $group;
public $meta;
private static $display;
public function __construct()
{
if(self::$display)
{
$this->meta =& self::$display->meta;
$this->user =& self::$display->user;
$this->group =& self::$display->group;
}
else
{
self::$display = $this;
}
}
function something
{
return null;
}
}
class Doing extends Base
{
function something
{
$this->user->id = 1;
$this->user->name = "nic";
/*------------other objects--------------*/
return $this->user;
}
}
Хотелось бы узнать все тонкости его работы.
Я понимаю его работу так:
В средине класса Doing который является наследником базового класса,
возможно создавать объекты (только user, group и meta) и давать им различные свойства (любые), присваивая этим свойствам значения.
Если рассматривать класс Base, то здесь в конструкторе присутствует условие:
- если существует значение статического свойства display то публичным свойствам по ссылке передаются значения display;
- иначе свойству дисплей присасываются все объекты которые есть (
$this);
Не совсем понятно:
1. Почему для передачи по ссылке используется символ
=&, ведь в php 5 для этих целей достаточно просто знака
=, однако если убрать знак амперсанда скрипт перестает работать - создавать объекты.
2. Зачем используется статическое свойство?
3. Как можно передать в условие else { ....... } данные из вне, например из любого метода классов наследников базового класса?