我正在尝试从扩展类中检索变量。这就是我的主要课程的外观:
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会假装它正在运行它。
我的问题是,如何从扩展类中检索变量到我的主类?
答案 0 :(得分:1)
使用php的父关键字。
答案 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->
(取决于你有两个同名的变量)