Пространства имен PHP 5.3 - функции не работают должным образом - PullRequest
1 голос
/ 21 марта 2011

Некоторые функции не работают должным образом с пространствами имен

<?php
namespace MyApp;
class Fruit {}
class Apple extends Fruit {}

$apple = new Apple();
$name = 'Apple';

var_dump (is_subclass_of($apple, 'Fruit'));
var_dump (is_a($apple, 'Apple'));
var_dump (new $name);

Как я могу сделать это совместимым как с php 5.3, так и с php <5.3 без поддержки пространства имен?is_subclass_of и is_a не работают так! </p>

1 Ответ

8 голосов
/ 22 марта 2011
<?php
namespace MyApp;
class Fruit {}
class Apple extends Fruit {}

$apple = new Apple();
$name = 'MyApp\Apple';

var_dump (is_subclass_of($apple, 'MyApp\Fruit'));
var_dump (is_a($apple, 'MyApp\Apple'));
var_dump (new $name);

Вам необходимо полностью квалифицировать ваше имя пространства имен в функциях, которые принимают имя класса в виде строки вместо голого слова.Классы как голые слова разрешаются во время выполнения. Вот руководство по PHP для разрешения пространства имен , а - это страница с примерами использования строк для полной квалификации пространств имен .

(также обратите внимание на одинарные кавычки, чтобы предотвратить создание обратной косой черты.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...