2015-09-28 3 views
1

Почему я должен предоставлять ведущую обратную косую черту при предоставлении пути к классу? [\ Zend \ Validator \ EmailAddress(), а не только Zend \ Validator \ EmailAddress()]Zend Framework 2 - Класс активации

$ валидатор = новый \ Zend \ Validator \ EmailAddress();

$ email = "[email protected]";

если ($ validator-> IsValid ($ электронная почта)) {// электронная почта оказывается справедливым } еще {// электронной почты является недействительным; напечатайте причины foreach ($ validator-> getMessages() как $ messageId => $ message) { echo "Ошибка проверки" $ messageId ': $ message \ n "; } }

Спасибо!

+0

Вы объявили пространство имен в верхней части любого файла, в котором находитесь? –

+0

Да, используйте Zend \ Validator \ EmailAddress; Но это тоже нужно. Пространство имен в моем файле - это пространство имен Blog \ Controller; – Pat

ответ

1

Вы сказали, что вы объявили пространство имен Blog\Controller в начале класса, с:

namespace Blog\Controller 

Это говорит PHP, что по умолчанию все классы, указанные в пределах этого класса находятся в пределах Blog\Controller имен. Так что если вы должны были сделать то:

$validator = new Zend\Validator\EmailAddress(); 

то, что вы на самом деле делаете:

$validator = new Blog\Controller\Zend\Validator\EmailAddress(); 

который даст вам ошибку, поскольку этот класс не существует.

Если вы префикс класса с обратной косой чертой, вы говорите PHP, что этот класс не находится в объявленном пространстве имен, а вместо этого находится в глобальном пространстве, поэтому он работает.

Вы также сказали, что импортировали класс EmailAddress, используя use Zend\Validator\EmailAddress. Это позволяет вам ссылаться на этот класс как просто «EmailAddress». Таким образом, вы меняете свой код на:

$validator = new EmailAddress(); 

, который является гораздо более кратким. Это одно из преимуществ пространств имен - это позволяет использовать короче имена классов в вашем коде.

+0

Тим, большое спасибо. Я очень хорошо понимаю ваши заметки и решу проблему. Благодаря! – Pat