Um die Klasse zu überprüfen, müssen Sie sie mit dem Namespace und dem vollständigen Pfad angeben:
namespace Foo;
class Bar
{
}
und
var_dump(class_exists('Bar'), class_exists('\Foo\Bar'));
-ie Sie müssen den vollständigen Pfad zur Klasse angeben. Sie haben es in Ihrem Namespace und nicht im globalen Kontext definiert.
Wenn Sie die Klasse jedoch wie in Ihrem Beispiel in den Namespace importieren, können Sie sie über einen importierten Namen und ohne Namespace referenzieren. Dies ermöglicht Ihnen jedoch nicht, dies in dynamischen Konstruktionen und insbesondere in Inline-Zeichenfolgen zu tun bildet Klassennamen. Zum Beispiel schlagen alle folgenden fehl:
namespace Foo;
class Bar {
public static function baz() {}
}
use Foo\Bar;
var_dump(class_exists('Bar'));
var_dump(method_exists('Bar', 'baz'));
$ref = "Bar";
$obj = new $ref();
und so weiter. Das Problem liegt in der Mechanik der Arbeit für importierte Aliase. Wenn Sie mit solchen Konstruktionen arbeiten, müssen Sie den vollständigen Pfad angeben:
var_dump(class_exists('\Foo\Bar'));
var_dump(method_exists('\Foo\Bar', 'baz'));
$ref = 'Foo\Bar';
$obj = new $ref();