我有以下类。我想要的是在主类(class1)中定义一个变量,通过构造()变量,然后从其他类中调用那些扩展了class1的变量。OOP:从class2中获取构造定义的class1的变量(扩展class1)
Class1的:
<?php
class Class1 {
protected $var1;
public function __construct($var1 = '') {
if (!empty($var1)) $this->var1 = $var1;
}
public function get_var() {
return $this->var1;
}
}
Class2中:
<?php
class Class2 extends Class1 {}
指数:
<?php
require 'class1.php';
$class1 = new Class1('test');
echo 'Class1: ' . $class1->get_var();
require 'class2.php';
$class2 = new Class2();
echo '<br>Class2: ' . $class2->get_var();
这里的结果是,第一个Echo显示正确的值(测试),但第二个没有,只是一个空字符串。
那么,有没有一种方法可以做到这一点,而无需每次构造变量时都定义?
即使您扩展了Class1,Class2也有自己的构造函数。您需要实现Class2的构造函数,并通过':: parent()' – hasumedic
@hasumedic调用Class1的构造函数,这是我第一次阅读后才想到的,但这里的“问题”仅仅是$ class1和$ class2是两个不同的对象实例。没有办法,$ class2将具有相同的$ var1变量内容作为$ class1 ... – Zimmi
确实。一个类的两个不同实例不会共享相同的属性,除非它们实际上是用相同的属性实例化的。因此,在一天结束时,OP将需要在Class2中实现一个构造函数,该构造函数调用Class1的构造函数并使用相同的值对其进行实例化。 – hasumedic