То, что здесь происходит, это то, что класс является структурой, а структура скомпилирована перед выполнением вашего PHP Fiel, как во время компиляции PHP не создает никаких динамических данных, вы не можете использовать динамические данные .
Например:
$function = 'hello';
function $function(){}
Во время компиляции переменная '$ function' не существует, поэтому ее нельзя прочитать, в вашем классе PHP предусмотрена функция с именем __construct
, которая запускается во время выполнения, что означает, что остальная часть системы динамическая. данные доступны.
class foo
{
protected $bar;
public function __construct()
{
$this->bar = Db::Init();
}
}
Итак, процесс такой:
- Время компиляции
- Класс Foo
- переменная полоса
- функция __construct
- Время выполнения
- найден новый foo
- внутренне создать объект
- execute foo :: __ construct ()
- return foo
Это упрощенная версия процесса, есть несколько способов установить объекты в класс, вы можете сделать обычный подход, как показано выше
Вы можете ввести, выполнив:
public function __construct(Bar $bar)
{
$this->bar = $bar;
}
Вы можете создать базовый класс и расширить:
class DatabaseAccess
{
protected $db;
public function __construct()
{
$this->db = Db::Init();
}
}
и затем сделайте:
class User extends DatabaseAccess
{
public function getUser($id)
{
$this->db->fetchRow('users',$id);
}
}
}