我有两个类,一个是父类,另一个是扩展类,我需要在扩展类中使用主变量。例如
class parentClass
{
$this->value = null
function __construct()
{
echo "im parent" ;
}
}
class childClass extends parentClass
{
function sayIt()
{
var_dump($this->value);
}
}
$p = new parentClass ;
$p->value = 500 ;
$c = new childClass ;
$c->sayIt(); // this output null ! i want it to output 500 , how i can do that
谢谢
这不是继承的工作方式。childClass
不会自动连接到父类,它只是从parentClass
继承,它只是从父类继承所有公共和受保护的变量/方法。它没有连接到父实例。
如果你想让它输出500,你必须以某种方式将它分配给子类实例:
$c = new childClass ;
$c->value = 500;
$c->sayIt()
如果你需要一个在所有类和实例之间共享的变量,你可以使用static
变量
这个代码是严格的教育目的,我建议你去找一本关于面向对象编程基本原理的书
将变量设置为静态将使它可以通过子类 访问class parentClass {
public static $value = null;
function __construct() {
echo "patent called";
}
}
class childClass extends parentClass {
function sayIt() {
var_dump(self::$value);
}
}
$p = new parentClass();
parentClass::$value = 500;
$c = new childClass();
$c->sayIt();
你混淆了类结构和引用。
$p
是父类的一个实例。
$c
是子类的一个实例。
他们不共享他们的数据