【发布时间】:2012-01-08 09:53:09
【问题描述】:
这篇文章是由于我在从第二个命名空间扩展第一个命名空间中定义的类时遇到的一些困难。基于这篇文章:
PHP how to import all classes from another namespace
我试过这个:
文件命名空间1:
<?php
namespace FirstNS;
class baseObject
{
public $baseVar = 1;
public function baseFun() {}
}
?>
文件命名空间2:
<?php
namespace SecondNS;
use FirstNS;
class extendedObject extends FirstNS\baseObject {
public $extendedVar = 1;
public function extendedFun() {
}
}
?>
但是extendedFun中的$this只能访问$extendedVar和extendedFun,不能访问$baseVar和baseFun。我也试过use FirstNS as ClassFromFirstNS; 和class extendedObject extends ClassFromFirstNS 但是$baseVar 和baseFun 仍然无法通过$this 访问。 http://www.php.net/manual/en/language.namespaces.rationale.php、http://www.php.net/manual/en/language.namespaces.definition.php 和 http://www.php.net/manual/en/language.namespaces.importing.php 上的信息似乎也没有直接解决这个案例。
【问题讨论】:
-
你是如何实例化对象的?
$object = new baseObject()或$object = new extendedObject()? -
@Digital Precision,这只是在类扩展定义中。如果这些都在一个文件中,像这样: $baseVar 和 baseFun 可以从extendedFun 中访问。这是为了尝试了解在从不同文件访问命名空间时需要哪些命名空间声明才能使 $baseVar 和 baseFun 可访问。
-
命名空间或多或少与可见性无关。它们只是扮演类名的角色,并允许您为每个命名空间中的所有类和函数名添加前缀。
标签: php class namespaces