使用PHP命名空间
问题描述:
我一直在寻找网站来尝试使用PHP命名空间,但他们都似乎很模糊,但他们试图做的事很容易理解!使用PHP命名空间
我的问题是:我有一个名为people.php
的文件,并在其中定义了名为people
的类。如果我在同一个文件夹中创建另一个名为managers.php
的文件,我可以再定义一个名为people
的类,它扩展了原来的people
类,但名称空间为managers
,如果是这样,我必须'包含'原始people.php
,如果是,包括写作后:namespace managers
?
答
// people.php
<?php
namespace People;
class People {}
// managers.php
<?php
namespace Managers;
require_once __DIR__.'/people.php';
class People extends \People\People {}
答
命名空间是一种将包中的相关类进行分组的方法。你描述的可能最好的一个单一命名空间下放到像
<?php // people.php
namespace com\example\johnslibrary\people;
abstract class People {
}
然后
<?php // manager.php
namespace com\example\johnslibrary\people;
require_once 'path/to/People.php'; // can better use autoloading though
class Manager extends People {
}
因为经理是人的一个子类,所以没有太多的理由把他们变成自己的自己的命名空间。他们是专业人士。
如果您希望管理员使用自己的名称空间,则可以这样做,但必须在使用extends
关键字时使用完全限定名称,例如,
<?php // manager.php
namespace com\example\johnslibrary\managers;
require_once 'path/to/People.php';
class Manager extends \com\example\johnslibrary\people\People {
}
或导入人民类第一
<?php // manager.php
namespace com\example\johnslibrary\managers;
use com\example\johnslibrary\People as People;
require_once 'path/to/People.php';
class Manager extends People {
}
See the PHP Manual on Namespaces for extensive documentation.
答
我已经老了PHP类,我需要在新的PHP文件,例如使用它:index.php
必须使用iClass.php
。但在使用旧的iClass.php之前,我必须修改它,如下所示,以便我可以在index.php中使用它。
iClass.php:
namespace ic;
class iClass {
public static function callMeFromClass() {
echo 'OK - you have called me!';
exit;
}
}
的index.php
namespace inex;
require_once 'iClass.php';
use ic\iClass;
iClass::callMeFromClass();
有一点要注意,在PHP的命名空间并不能反映你的目录结构。您必须手动将您的目录结构与命名空间名称映射。 – Extrakun 2010-11-11 09:25:32
[This](http://www.sitepoint.com/php-53-namespaces-basics/)将是一个很好的资源,可以清除您需要了解的关于PHP名称空间的所有信息。 – 2015-07-28 11:31:22