【问题标题】:Zend Framework 2 - Instantiating ClassZend Framework 2 - 实例化类
【发布时间】:2015-09-29 09:17:41
【问题描述】:

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

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

$email = "example@example.com";

if ($validator->isValid($email)) { // 电子邮件似乎是有效的 } 别的 { // 电子邮件无效;打印原因 foreach ($validator->getMessages() as $messageId => $message) { echo "验证失败 '$messageId': $message\n"; } }

谢谢!

【问题讨论】:

  • 你是否在你所在文件的顶部声明了一个命名空间?
  • 是的,使用 Zend\Validator\EmailAddress;但这也需要 \ 。我文件中的命名空间是 namespace Blog\Controller;

标签: class zend-framework


【解决方案1】:

你说你在类的开头声明了Blog\Controller的命名空间,用:

namespace Blog\Controller

这告诉 PHP 默认情况下,该类中引用的所有类都在 Blog\Controller 命名空间内。因此,如果您要这样做:

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

你实际上在做的是:

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

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

如果你在一个类前面加上反斜杠,你是在告诉 PHP 该类不在你声明的命名空间中,而是在全局空间中,这就是它工作的原因。

您还说您已经使用use Zend\Validator\EmailAddress 导入了EmailAddress 类。这允许您将该类简单地引用为“EmailAddress”。因此,您将代码更改为:

$validator = new EmailAddress();

更简洁。这是命名空间的优点之一——它允许您在代码中使用更短的类名。

【讨论】:

  • 蒂姆,非常感谢。我能够很好地理解您的笔记并解决问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多