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';