PHP命名空间类

时间:2014-06-22 05:47:06

标签: php class inheritance namespaces extend

我在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();

2 个答案:

答案 0 :(得分:2)

命名空间与实际包含文件无关,它们是两个完全独立的机制。所以,是的,在使用它之前,您仍然必须require_once定义该类的文件。

话虽如此,特别是对于名称空间,通常使用自动加载器,因此您不必编写大量require代码。如果您将文件夹中的类文件与其命名空间完全一致,则可以非常轻松地自动加载其文件。请参阅http://php.net/manual/en/language.oop5.autoload.phphttps://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;
}