Как я могу назвать статический метод для переменного класса?

Уже найдено решение. Мое отображение пропустило пересечение, оно отображалось правильно

37
задан JackWhiteIII 17 June 2015 в 05:45
поделиться

5 ответов

Можно использовать call_user_func() :

$class = call_user_func(array($class, 'getInstance'));

первый аргумент callback тип, содержащий имя класса и имя метода в этом случае.

38
ответ дан Greg 27 November 2019 в 04:24
поделиться

Почему бы не использовать __ автозагрузка () функция?

http://www.php.net/autoload

тогда Вы просто инстанцируете объекта при необходимости.

2
ответ дан kodisha 27 November 2019 в 04:24
поделиться

Похоже на борьбу с текущим статическим связыванием реализации PHP которое является, почему Вы переходите через обручи с getCallingClass. Я могу сказать Вам на основе опыта, необходимо, вероятно, отказаться от попытки поместить инстанцирование в родительский класс через статический метод. Это вызовет Вас больше проблем в конце. PHP 5.3 реализует "последнее статическое связывание" и должен решить Вашу проблему, но это, очевидно, не помогает теперь.

Вы - вероятно, более обеспеченное использование функциональности автозагрузки, упомянутой kodisha, объединенным с серьезной реализацией Singleton. Я не уверен, является ли Вашей целью синтаксический сахар или нет, но это думает, что Вы добьетесь большего успеха в конечном счете, чтобы избегать пытаться сохранить несколько символов.

0
ответ дан Barrett Conrad 27 November 2019 в 04:24
поделиться

Первое, что пришло на ум, тестирование потребностей, проверка и т.д.:

<?php

    function loadClass($className) {
        if (is_object($GLOBALS[$className]))
            return;

        $sClassPath = SYSPATH."/classes/{$className}.php";
        if (file_exists($sClassPath)) {
            require_once($sClassPath);

            $reflect = new ReflectionClass($className);
            $classObj = $reflect->newInstanceArgs();
            $GLOBALS[$className] = $classObj;
        }
    }

?>
0
ответ дан J.C. Inacio 27 November 2019 в 04:24
поделиться

Вызов статических функций по имени переменной класса, очевидно, доступен в PHP 5.3:

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0

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

Я бы и сам сейчас не отказался от такой возможности.

До тех пор вы не можете считать, что каждый класс, который вы загружаете, создан как синглтон. Пока вы используете < 5.3, вам придется просто загрузить класс и инстанцировать его через конструктор:

function loadClass($class) {
  $sClassPath = SYSPATH."/classes/{$class}.php";
  if (file_exists($sClassPath)) {
    require_once($sClassPath);
    $class = new $class;
  }

}

ИЛИ

Просто загрузите класс, не создавая из него объект. Затем вызовите "::getInstance()" для тех объектов, которые должны быть синглтонами, и "new" для тех, которые ими не являются, вне функции loadClass().

Хотя, как уже указывали другие, __autoload(), вероятно, будет работать хорошо для вас.

47
ответ дан 27 November 2019 в 04:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: