使用 PHP 命名空间

2022-08-30 19:09:59

我一直在搜索网站,试图掌握使用PHP命名空间,但它们似乎都很模糊,但它们试图做的事情很容易理解!

我的问题是:我有一个名为的文件,其中定义了名为.如果我在同一文件夹中创建另一个调用的文件,我可以再次定义一个类,该类扩展了原始类,但在 的命名空间中,如果是这样,我是否必须“包含”原始类,如果是这样,我是否将包含放在写入之后:?people.phppeoplemanagers.phppeoplepeoplemanagerspeople.phpnamespace managers


答案 1

命名空间是将相关类分组到包中的一种方法。您描述的内容最好放在单个命名空间下,例如

<?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 {

}

因为 Manager 是 People 的子类,所以没有太多理由将它们放入自己的命名空间中。他们是专门的人。

如果您希望 Managers 位于他们自己的命名空间中,则可以这样做,但在使用关键字时必须使用完全限定的名称,例如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 {

}

请参阅 PHP 命名空间手册以获取大量文档。


答案 2
// people.php
<?php
namespace People;

class People {}


// managers.php
<?php
namespace Managers;

require_once __DIR__.'/people.php';

class People extends \People\People {}

推荐