Объявление новой статической переменной вне класса - PullRequest
4 голосов
/ 10 июня 2011

Есть ли способ объявить новые статические переменные вне этого класса, даже если он не задан в классе?

// Using this class as a static object.
Class someclass {
    // There is no definition for static variables.
}

// This can be initialized
Class classA {
    public function __construct() {
        // Some codes goes here
    }
}

/* Declaration */
// Notice that there is no static declaration for $classA in someclass
$class = 'classA'
someclass::$$class = new $class();

Как это можно сделать?

Спасибо за советы.

Ответы [ 2 ]

2 голосов
/ 10 июня 2011

Этого нельзя сделать, потому что статические переменные, ну ... STATIC и поэтому не могут быть объявлены динамически.

EDIT: Возможно, вы захотите попробовать использовать реестр.

class Registry {

    /**
     * 
     * Array of instances
     * @var array
     */
    private static $instances = array();

    /**
     * 
     * Returns an instance of a given class.
     * @param string $class_name
     */
    public static function getInstance($class_name) {
        if(!isset(self::$instances[$class_name])) {
            self::$instances[$class_name] = new $class_name;
        }

        return self::$instances[$class_name];
    }

}

Registry::getInstance('YourClass');
2 голосов
/ 10 июня 2011

__get() магический метод в PHP вызывается при доступе к несуществующему свойству объекта.

http://php.net/manual/en/language.oop5.magic.php

У вас может быть контейнер, внутри которого вы будете обрабатывать это.

Редактировать:

Смотрите это:

Magic __get get для статических свойств в PHP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...