导入PHP命名空间以在该命名空间中扩展类

时间:2011-11-29 00:31:22

标签: php class namespaces

这篇文章是由于某些困难,我正在从第二个命名空间扩展第一个命名空间中定义的类。基于这篇文章:

PHP how to import all classes from another namespace

我试过了:

文件NameSpace1:

<?php
namespace FirstNS;

class baseObject
{
    public $baseVar = 1;

public function baseFun() {}
}

?>

文件NameSpace2:

<?php
namespace SecondNS;

use FirstNS;

class extendedObject extends FirstNS\baseObject {
    public $extendedVar = 1;

    public function extendedFun() {

    }
}

?>

$this中的extendedFun只能访问$extendedVarextendedFun,而不是$baseVarbaseFun。我还尝试了use FirstNS as ClassFromFirstNS;class extendedObject extends ClassFromFirstNS,但$baseVarbaseFun仍无法通过$this访问。 http://www.php.net/manual/en/language.namespaces.rationale.phphttp://www.php.net/manual/en/language.namespaces.definition.phphttp://www.php.net/manual/en/language.namespaces.importing.php上的信息似乎也没有直接解决此案例。

2 个答案:

答案 0 :(得分:1)

我没有问题让你的代码工作,从你的问题中你不清楚你有什么问题:

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();
}

Demo - 希望这有用。

答案 1 :(得分:0)

试一试:

// 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();