Zend Framework 2 - 实例化 Class

Zend Framework 2 - Instantiating Class

为什么在提供 class 的路径时必须提供前导反斜杠? [\Zend\Validator\EmailAddress() 而不仅仅是 Zend\Validator\EmailAddress()]

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

$email = "example@example.com";

if ($validator->isValid($email)) { // email appears to be valid } else { // email is invalid; print the reasons foreach ($validator->getMessages() as $messageId => $message) { echo "Validation failure '$messageId': $message\n"; } }

谢谢!

您说您在 class 的开头声明了 Blog\Controller 的名称space,其中:

namespace Blog\Controller

这告诉 PHP 默认情况下,class 中引用的所有 class 都在 Blog\Controller 名称 space 中。因此,如果您要这样做:

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

你实际做的是:

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

这会给你一个错误,因为 class 不存在。

如果您在 class 前加上反斜杠,您是在告诉 PHP class 不在您声明的名称 space 中,而是在全局 space,这就是它起作用的原因。

您还说过您使用 use Zend\Validator\EmailAddress 导入了 EmailAddress class。这允许您将 class 简单地引用为 'EmailAddress'。因此,您将代码更改为:

$validator = new EmailAddress();

这样就简洁多了。这是 namespaces 的优点之一 - 它允许您在代码中使用 更短的 class 名称。