这篇文章是由于我从第二个命名空间扩展在第一个命名空间中定义的类的一些困难。基于这篇文章:
PHP如何从另一个命名空间导入所有类
我试过了:
File NameSpace1:
<?php
namespace FirstNS;
class baseObject
{
public $baseVar = 1;
public function baseFun() {}
}
?>
File NameSpace2:
<?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上的信息似乎也没有直接针对这个案例。
试一试:
// File1.php
namespace FirstNS;
class baseObject
{
public $baseVar = 1;
public function baseFun() {}
}
// File2.php
namespace SecondNS;
include 'File1.php';
use FirstNS;
class extendedObject extends FirstNS'baseObject {
public $extendedVar = 2;
public function extendedFun()
{
var_dump($this->baseVar); // Outputs 1
var_dump($this->extendedVar); // Outputs 2
}
}
// File3.php
include 'File2.php';
$object = new SecondNS'extendedObject();
$object->extendedFun();
我没有问题,让你的代码工作,它不清楚从你的问题,你有一个问题:
namespace FirstNS
{
class baseObject
{
public $baseVar = 1;
public function baseFun() {}
}
}
namespace SecondNS
{
use FirstNS;
class extendedObject extends FirstNS'baseObject
{
public $extendedVar = 1;
public function extendedFun()
{
echo $this->extendedVar, "'n"; # works
$this->baseFun(); # works
}
}
echo '<pre>';
$obj = new extendedObject();
echo $obj->baseVar, "'n"; # works
$obj->extendedFun();
}