我有一个这样的课程:
class A {
public $var = "";
function __construct() {
$this->var = "value";
}
}
这样的儿童班:
class B extends A {
function __construct() {
// Is this correct?
parent::__construct();
}
function my_function() {
// Or this?
// $options is an instantiation of A.
global $options;
echo $this->var;
}
}
我遇到的问题是当我调用my_function()方法时,var的值为空。在php.net上阅读了一段时间后,我发现当一个子类有自己的构造函数时,父构造函数被覆盖,这就是我的变量为空的原因。我的问题是,如果我调用parent :: __ construct()的方式是正确的解决方案,或者我是否应该全局化我在脚本中创建的实例化对象?我在PHP.net和其他地方的评论中做了很多阅读,我找不到任何简洁的内容。
答案 0 :(得分:1)
使用parent::method()
调用重写方法(不仅是构造函数),因此您的解决方案是正确的。在您的情况下,您可以完全省略构造函数,并在声明属性时设置值。
class A {
public $var = "value";
}
附加:全局变量在各个方面都很丑陋。只使用它们,如果你有真的这样做的理由而且永远不会,因为它更方便。
答案 1 :(得分:0)
以下“实施”......
$instanceOfB = new B();
$instanceOfB->my_function();
导致“价值”...正如所料。
您调用my_function()的方式是什么?