PHP来自扩展类的变量

时间:2009-09-01 10:06:13

标签: php class variables extends

我正在尝试从扩展类中检索变量。这就是我的主要课程的外观:

class SS {
    public $NONE = NULL;
    public $NUMBERS = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
    public $OPERATORS = array("=", "&&", ">", "<", "+", "-", "/", "*", "^");
    public $DBLQUOTES = '"$1"';
    public $SNGQUOTES = "'$1'";
    public $CODE;

    function SuperSyn($sCode, $cLang) {         
        $hLang = new VB6;
        $VB6 = $hLang->__construct();
        echo $VB6->ssAuthor;
    }
}

我的扩展课程看起来像这样(我删除了许多关键字)。

class VB6 extends SS {
    public function __construct() {
        $ssAuthor = "James Brooks";
        $ssCSS = "languages/vb6.css";
        $ssNumbers = $NUMBERS;
        $ssKeywords = array("Abs", "Access", "AddItem");
        $ssReserved = $NONE;
        $ssComments = "('.+)";
        $ssOperators = $OPERATORS;
        $ssDoubleQuote = $NONE;
        $ssSingleQuote = $NONE;
    }
}

如果我删除了被调用的公共函数__construct,那么PHP会假装它正在运行它。

我的问题是,如何从扩展类中检索变量到我的主类?

4 个答案:

答案 0 :(得分:1)

使用php的父关键字。

PHP parent

答案 1 :(得分:1)

在创建对象时,将为您调用构造函数,因此这应该有效:

function SuperSyn($sCode, $cLang) {                     
     $hLang = new VB6(); //I think you need some parameters here
     echo $VhLang->ssAuthor;
}

但是在VB6构造函数中,您目前只分配局部变量,因此您将无法从外部访问ssAuthor。相反,你可能想做类似的事情:

class VB6 extends SS {
    public $ssAuthor;

    public function __construct() {
        $this->ssAuthor = "James Brooks";
        //etc.
    }
}

答案 2 :(得分:0)

我认为您的期望存在逻辑问题。为什么SS类的函数应该知道只存在于VB6子类中的变量?

这不是一个干净的继承行为,并揭示了你的类的问题。

要解决的两个选择:

  • 将变量放在主类中,以便在该类的函数中使用它
  • 使用子类的变量在子类
  • 中放置函数

(在阅读关于父关键词和'$ this'变量的评论之后:我不同地理解了这个问题,并且不认为其中任何一个会有所帮助,因为需要相反的方向:父类函数&gt;子类变量,不是子类函数&gt;父类变量)

答案 3 :(得分:0)

使用parent::$this->(取决于你有两个同名的变量)