如何在类中使用命名空间时解决致命错误

时间:2014-12-04 17:52:42

标签: php class namespaces

我有一个PHP类,我想为它添加一个命名空间。 我在Windows Server 2008 R2和Apache 2.4上使用PHP Version 5.5.12

我的权限类位于/classes/Permissions.php     

class Permissions
{
     private $db;

     public function __construct(){

     }

     public function sayHello(){
         echo 'Hello';
     }

     private function _test(){

     }

}
?>

当我想要启动该类的新实例时,我会在位于"/test.php"的文件中执行此操作

require_once 'classes/Permissions.php';
$r = new Permissions();
$r->sayHello();

这很好。

现在我正在尝试添加名称空间“我之前从未使用过”

我更改了代码以实现名称空间,如此

<?php
namespace classes\Permissions;
class Permissions
{
     private $db;

     public function __construct(){

     }

     public function sayHello(){
         echo 'Hello';
     }

     private function _test(){

     }

}
?>

当我正在盯着课程的新实例时,我会这样做

require_once 'classes/Permissions.php';
$r = new classes\Permissions();
$r->sayHello();

但有了这个,我得到致命的错误

Fatal error: Class 'Permissions' not found

我做错了什么?以及如何纠正它?

3 个答案:

答案 0 :(得分:0)

您应该在命名空间的开头调用带反斜杠的类。 试试这样:

$r = new \classes\Permissions();

答案 1 :(得分:0)

如果您要使用require_once手动要求该文件,您可以自由地将该类放在您喜欢的任何命名空间下。所以你可以去:

namespace Foo;

class Permissions {}

您可以使用以下命令实例化此类:

require_once 'path.to.classfile.php';

$r = Foo\Permissions(); //if you're in global namespace

docs:http://php.net/manual/en/language.namespaces.php

所以当你有这样的课时:

namespace classes\Permissions;

class Permissions {}

在包含它之后创建对象的方法是new classes\Permissions\Permissions();再次假设你在全局命名空间中。

答案 2 :(得分:0)

不是\classes\Permissions\Permissions()吗?您在Permissions命名空间

中有一个班级\classes\Permissions