PHP 类变量/方法覆盖
[写在前]:
class FarClass{
private $myPv;
protected $myVar;
public function myFun(){
...
}
....
}
class SonClass extends FarClass{
private $myPv;
protected $myVar;
public function myFun(){
...
}
...
}
从上面的例子中可以看出, 类的私有变量不会产生覆盖。原因在于private成员无法继承下来。对于protected/pulic变量,则会产生覆盖问题。如果要在子类中访问父类变量,在java中可能使用super关键字,即:class SonClass{
private $myPv;
protected $myVar;
public function myFun{}
public fuction myFun2{
//下面这名将会抛出一个异常,不能访问父类私有变量
//var0 = super.myPv;
var1 = super.myVar;
var2 = super.myFun();
}
...
}
那么,在PHP中又如何呢?PHP的parent关键词只能用于调用父类的可继承方法(protected/public)及可继承静态变量,而对于非静态成员,则会抛出异常:Fatal error: Access to undeclared static property。如:<?php
class Far{
protected $myVar;
private function Fun1(){}
function Fun2(){}
}
class Son extends Far{
protected $myVar;
funciton Fun2(){
//下面句将会抛出异常,不能访问父类私有方法。
parent :: Fun1();
//下面会报错,Fatal error: Access to undeclared static property:
$var = parent :: $myVar;
//这一句正常运行,无论方法是否为静态方法。
parent :: Fun2();
}
}
如果要访问父类被覆盖的变量或方法,parent是否可用呢?通过上面的例子可以看出是不行的,那么,唯一的办法是在父类中增加一个方法,通过调用父类方法,从而取得被覆盖的父类变量。<?php
class Far{
protected $myVar;
function getMyVar(){
return $myVar;
}
}
class Son extends Far{
protected $myVar;
function getMyVar(){
return parent :: getMyVar();
}
}

浙公网安备 33010602011771号