Назначение переменной класса из подкласса без конструктора - PullRequest
2 голосов
/ 24 января 2012

l Я создаю облегченный слой 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 Ответ

2 голосов
/ 24 января 2012

Функция, которую вы ищете, называется 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);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...