Рассмотрим статический класс (частный конструктор, только статические методы & переменных).PHP: можно ли вызвать метод статического класса из другого статического класса?
Теперь определение грубого класса будет выглядеть следующим образом:
class A{
private function __construct(){}
public static test(){};
}
class B{
private function __construct(){}
}
ли это как-то можно назвать что-то вроде B::A::test()
?
Или, может быть, через переменную? Что-то вроде B::$A::test()
?
Я предполагаю, что это возможно какой-то общий вызов захватывающего, но я не могу понять это ...
ВАЖНО: Кроме того, я хочу назвать какой-либо другой статический класс от B
, а не только от A
класс ...
EDIT2: То, что я хочу добиться того, чтобы назвать статический класс через другой статический класс, если это возможно ... очень похоже на вызов метода из переменной объекта - но статический класс (очевидно) не является инстанцированным.
EDIT3: Также возможно решение назвать его как B::CLASSNAME_METHOD_NAME
и поймать его __callStatic
, но я предпочел бы сделать B::CLASSNAME::METHOD_NAME
...
Другое возможное решение:
Если вы не хотите создать целый синглтон, это может быть решение - создание частичного singleton - какой-то singleton-hepler, altough с использованием ->
, чтобы вызвать статический метод, может быть запутанным!
class AA{
private function __construct(){}
private static $instance;
public function getInstance(){ return empty(self::$instance)?(new self()):self::$instance; }
public function __call($method_name, $args) {
return AA::$method_name($args);
}
public static function test($a, $b){
echo "TEST: A:".$a." B:".$b;
}
}
class B{
private function __construct(){}
public static function A(){
return AA::getInstance();
}
}
B::A()->test("one", "two");
Что бы 'B :: A :: тест()' 'делать, что A :: тест()' не ...?! – deceze
Я до сих пор не понимаю, какая разница. Скажем так: синтаксис, который вы показываете, не существует и, следовательно, не имеет внутреннего смысла. Вы пытаетесь придумать здесь какой-то новый вид операции или приступить к какой-либо существующей операции с плохим объяснением. Пожалуйста, объясните более подробно, что должно было произойти, и почему просто 'A :: test()' не сокращает его. – deceze
Почему вы хотите вызвать статический класс через другой статический класс? разве это не злоупотребление целью статического класса? Чтобы упростить создание экземпляра в других классах (сделать его абстрактным для удобства использования). – izk