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 名称。
为什么在提供 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 名称。