我在PHP中读了很多关于命名空间的内容,我仍然感到困惑。
我在名称空间Entity(Class A)下的不同文件夹中有一个类。
我在同一名称空间(B类)下的另一个文件夹中有另一个类,并扩展了A类。
我收到错误消息,说找不到A级。
我的主要问题是 - 在创建B类的新实例时,是否必须包含A类?
这是我的代码: (A类)
namespace Entity;
//Framework/Entity/BaseModel.php
class BaseModel {
//TODO: IMPLEMENT THIS
public function GetList() {
return null;
}
}
(B类)
namespace Entity;
//Models/Points.php
class Points extends BaseModel{
public $Id = null;
}
(主档案)
require_once(dirname(dirname(__FILE__)) . '/Models/Points.php');
$points = new Points();
答案 0 :(得分:2)
命名空间与实际包含文件无关,它们是两个完全独立的机制。所以,是的,在使用它之前,您仍然必须require_once
定义该类的文件。
话虽如此,特别是对于名称空间,通常使用自动加载器,因此您不必编写大量require
代码。如果您将文件夹中的类文件与其命名空间完全一致,则可以非常轻松地自动加载其文件。请参阅http://php.net/manual/en/language.oop5.autoload.php和https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
答案 1 :(得分:0)
父类定义必须知道子类的定义。 甚至在创建子类的实例之前。
PHP怎么会知道你要创建什么内容?
require_once('BaseModel.php')
namespace Entity;
//Models/Points.php
class Points extends BaseModel{
public $Id = null;
}