我有一个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
我做错了什么?以及如何纠正它?
答案 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