Jeśli spróbujesz użyć class_exists() wewnątrz metody klasy w PHP, musisz podać pełną nazwę klasy - bieżący obszar nazw nie jest przestrzegany. Na przykład, jeśli moja klasa jest:Czy istnieje alternatywa dla przestrzeni nazw dla PHP class_exists()?
<?
namespace Foo;
class Bar{
public function doesBooClassExist(){
return class_exists('Boo');
}
}
A Boo jest klasa (które właściwie autoloads) i wygląda na to
namespace Foo;
class Boo{
// stuff in here
}
gdy próbuję:
$bar = new Bar();
$success = $bar->doesBooClassExist();
var_dump($success);
dostaniesz Fałszywe ... czy istnieje alternatywny sposób zrobienia tego bez wyraźnego określenia pełnej nazwy klasy (np. class_exits('Foo\Boo')
)?
Czy próbowałeś poprzedzać nazwę klasy przez '__NAMESPACE__' w swojej metodzie' doesBooClassExist() '? Czy nie rozumiem, co próbujesz zrobić? (zobacz http://www.php.net/manual/en/language.namespaces.nsconstants.php) – Crontab
@Crontab Można to zrobić, gdy wskażesz, czy nie istnieje inny sposób, który jest już znany w przestrzeni nazw - tylko osobiste preferencje . Powinieneś zrobić to odpowiedź. – Ray
Nie jestem pewien, ale myślę, że jest to poprawne dla class_exists do wyszukiwania nie w przestrzeni nazw. Jeśli sprawdza bezpośrednio w przestrzeni nazw, w jaki sposób będzie można sprawdzić dla klasy poza przestrzeniami nazw od wewnątrz? – Svetoslav