Если вы попытаетесь использовать class_exists () внутри метода класса в PHP, вы должны указать полное имя класса – текущее пространство имен не соблюдается. Например, если мой класс:
<? namespace Foo; class Bar{ public function doesBooClassExist(){ return class_exists('Boo'); } }
И Boo – класс (который автоматически автозагружается) и выглядит так
namespace Foo; class Boo{ // stuff in here }
если я попробую:
$bar = new Bar(); $success = $bar->doesBooClassExist(); var_dump($success);
вы получите ложный … есть ли альтернативный способ сделать это без явного указания полного имени класса (т.е. class_exits('Foo\Boo')
)?
До 5.5 лучший способ сделать это – всегда использовать полное имя класса:
public function doesBooClassExist() { return class_exists('Foo\Boo'); }
Это не сложно, и это абсолютно ясно, о чем вы говорите. Помните, вы должны идти на удобочитаемость. Импорт пространства имен удобен для записи, но делает чтение запутанным (потому что вам нужно иметь в виду текущее пространство имен и любые импорты при чтении кода).
Однако в версии 5.5 появилась новая конструкция:
public function doesBooClassExist() { return class_exists(Boo::class); }
Константа псевдомагии class
может быть помещена в любой идентификатор, и она вернет полное имя класса, которое оно решит …….