PHP, выполнить публичную статическую функцию из $class

Как вызвать публичную статическую функцию класса из другого пространства имен в php. У меня есть этот код:

namespace x\y\z;

use x\y\z\h\Foo;
...
$classinstring = 'Foo';
$classinstring::getType();

и я получил ошибку, что php не может найти класс Foo Fatal error: Uncaught Error: Class 'Foo' not found как я могу это сделать?

2 ответа

Попробуй это.

namespace x\y\z;

use x\y\z\h\Foo;
...
$classinstring = 'Foo';
$classinstring = new $classinstring;
$classinstring::getType();

ИЛИ ЖЕ

Возможно, ваш файл просто не смог найти и получить доступ к классу x \ y \ z \ h \ Foo. Убедитесь, что у вашего класса Foo есть пространство имен пространства имен \ x \ y \ z \ h.

Чтобы создать экземпляр класса, вы должны использовать new,

$classinstring = new Foo();

Пишу $classinstring = 'Foo' правопреемники $classinstring строковый литерал "Foo",


Пространство имен является ярлыком для ваших классов. Эти два утверждения равны:

namespace x\y\z;

use x\y\z\h\Foo;

$bar = new Foo();

а также

$bar = new \x\y\z\h\Foo();


Также убедитесь, что ваши имена классов написаны точно так же, как имя файла.


Статические методы не требуют создания экземпляров для использования; Вы можете позвонить им прямо из названия класса.

Foo::someCustomMethod();

Ты используешь getType() Например, хотя это нативная глобальная функция PHP и ее нельзя вызывать как статический метод, если вы не определили свой собственный getType() метод в классе.

class Foo
{
    public function getType()
    {
        echo 'This is my own function.';
    }

    public static function callAnywhere()
    {
        echo 'You don't have to make a new one to use one.';
    }
}

Это хорошо, если вам нужно вызывать методы класса.

Foo::callAnywhere() // prints 'You don't have to make a new one to use one.';

$bar = new Foo();
$bar->getType(); // prints 'This is my own function.'

$other = new stdClass();
echo getType($other); // prints 'object';
Другие вопросы по тегам