Присвоение переменной класса из подкласса без конструктора
Я создаю облегченный слой Model для доступа к базе данных моего проекта. Я хотел бы, чтобы это было в духе Ruby on Rails. Вместо создания нового объекта Model я хочу использовать одноэлементный подход. Вот текущая проблема, с которой я сталкиваюсь:
class BaseModel {
public static $name;
public static function get($id) {
echo "SELECT * FROM ". self::$name ."s WHERE ". self::$name .' = '.$id;
}
}
class Customer extends BaseModel {
//parent::$name = 'customer'; => ERROR
}
$c = Customer::get(4);
Есть ли способ назначить статические члены родителя в теле класса? Я хотел бы избежать создания реального синглтон-класса, если это возможно. Благодарю.
1 ответ
Решение
Функция, которую вы ищете, называется Late Static Binding (LSB) и, к счастью, была введена в PHP в 5.3. Вы можете прочитать об этом здесь: http://php.net/manual/en/language.oop5.late-static-bindings.php
Это ваш код, переписанный с использованием LSB.
<?php
class BaseModel {
public static $name;
public static function get($id) {
echo "SELECT * FROM ". static::$name ."s WHERE ". static::$name .' = '.$id;
}
}
class Customer extends BaseModel {
public static $name = 'customer';
}
$c = Customer::get(4);
?>