下面是父类`Animal`的代码:
//by www.qzphp.cn
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
}
现在,我们可以创建子类`Cat`并通过使用`parent`关键字来获取父类`Animal`的`name`属性的值。下面是子类`Cat`的代码:
//by www.qzphp.cn
class Cat extends Animal {
public function getName() {
echo "Parent class name: " . parent::$name;
}
}
$cat = new Cat("Tom");
$cat->getName();
在上面的代码中,子类`Cat`中的`getName`方法使用了`parent::$name`来获取父类`Animal`的`name`属性的值。在我们创建一个`Cat`对象后,调用`getName`方法,我们将看到输出结果为`Parent class name: Tom`,其中`Tom`是我们在创建`Cat`对象时传递的参数。通过这个例子,我们可以看到,通过使用`parent`关键字,我们可以轻松地获取父类的变量值。这对于在子类中使用父类的属性和方法非常有用,尤其是当我们需要访问父类的保护属性时。例如,在上面的示例中,如果我们将`Animal`类的`$name`属性修改为私有属性,那么在子类`Cat`中将无法直接访问该属性。但是,通过使用`parent`关键字,我们可以绕过访问限制并获取父类的属性值。此外,我们还可以在子类中为父类的属性赋新值。如果我们在子类中同时定义了一个和父类相同名称的属性,并给它赋了新值,那么在子类中访问该属性时,将会优先使用子类的属性值。让我们看一个例子来演示这个行为。下面是一个新的父类`Fruit`的代码:
//by www.qzphp.cn
class Fruit {
protected $color;
public function __construct($color) {
$this->color = $color;
}
}
现在,我们创建了一个子类`Apple`,并在子类中同时定义了一个和父类`Fruit`相同名称的属性`color`,并给它赋了新值。下面是子类`Apple`的代码:
//by www.qzphp.cn
class Apple extends Fruit {
protected $color;
public function __construct($color) {
$this->color = $color;
}
public function getColor() {
echo "Child class color: " . $this->color;
echo "Parent class color: " . parent::$color;
}
}
$apple = new Apple("Green");
$apple->getColor();
在上面的代码中,子类`Apple`中的`getColor`方法通过`$this->color`获取子类的`color`属性值,并通过`parent::$color`获取父类的`color`属性值。当我们创建一个`Apple`对象后,调用`getColor`方法,我们将看到输出结果为`Child class color: Green`和`Parent class color: Green`,其中父类的`color`属性值在子类中也被修改为了`Green`。通过这个例子,我们可以看到,子类中的同名属性会覆盖父类的属性,但我们仍然可以通过使用`parent`关键字来获取父类的属性值。综上所述,使用PHP获取父类的变量值非常简单。通过使用`parent`关键字,我们可以轻松地访问父类的属性和方法,无论是公共的还是受保护的。此外,通过在子类中定义和父类相同名称的属性,我们可以覆盖父类的属性值,但仍然可以通过`parent`关键字获取父类的属性值。这些功能使我们能够更灵活地使用继承,在我们的代码中实现更高的复用性和可维护性。无论是在简单的继承关系还是更复杂的继承链中,我们都可以利用这些特性来优化我们的代码。

