使用PHP命名空间

Joh*_*ohn 22 php namespaces

我一直在搜索网站,尝试使用PHP命名空间,但它们看起来都很模糊,但他们想要做的事情很容易理解!

我的问题是:我有一个名为的文件,people.php并且在其中定义了一个名为的类people.如果我创建另一个managers.php在同一文件夹中调用的文件,我可以定义一个再次调用的类,people它扩展了原始people类,但在命名空间中managers,如果是这样,我必须"包含"原始文件people.php,如果是这样,我会在写入后放入包含:namespace managers

Gor*_*don 32

命名空间是一种在包中对相关类进行分组的方法.您描述的内容最好放在一个名称空间中

<?php // people.php
namespace com\example\johnslibrary\people;
abstract class People {

}
Run Code Online (Sandbox Code Playgroud)

然后

<?php // manager.php
namespace com\example\johnslibrary\people;
require_once 'path/to/People.php'; // can better use autoloading though
class Manager extends People {

}
Run Code Online (Sandbox Code Playgroud)

因为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 {

}
Run Code Online (Sandbox Code Playgroud)

或者首先导入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 {

}
Run Code Online (Sandbox Code Playgroud)

有关详尽的文档,请参阅命名空间的PHP手册.


Ste*_*rig 4

// people.php
<?php
namespace People;

class People {}


// managers.php
<?php
namespace Managers;

require_once __DIR__.'/people.php';

class People extends \People\People {}
Run Code Online (Sandbox Code Playgroud)