我一直在搜索网站,尝试使用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)
// 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)