通过例子来学习比较轻松。
class BaseObj{
private static $arrList=[];
private static $ID=0;
protected $name;
public $aliasName;
public function __construct(string $name){
self::$ID=self::$ID+1;//ID自动加1
if($name==''||$name==null){//如果不传入名称则自动添加名称
$this->name="未命令".self::$ID;
}else{
$this->name=$name;
}
self::$arrList[self::$ID]=$this->name;//添加到控件数组
}
public function GetName(){//输出名称
return $this->name;
}
public function GetID(){//输出ID
return self::$ID;
}
public function GetArrList(){//输出控件数组
return self::$arrList;
// for($i=1;$i<=count(self::$arrList);$i++){
// echo "ID:".$i." name:".self::$arrList[$i]."<br>";
// }
}
}
class ExtObj extends BaseObj{
public function GetArrList(){//重写父类方法
$arr=parent::GetArrList();//执行父类方法
for($i=1;$i<=count($arr);$i++){
if($i==parent::GetID()){
echo "ID:".$i." name:".$arr[$i]." -->最后生成的对象<br>";
}elseif($arr[$i]==parent::GetName()){
echo "ID:".$i." name:".$arr[$i]." -->当前正在输出的对象<br>";
}else{
echo "ID:".$i." name:".$arr[$i]."<br>";
}
}
}
}
$TmpObj1=new ExtObj('第一个控件');
echo $TmpObj1->GetName();
echo "<hr/>";
$TmpObj2=new ExtObj('');
echo $TmpObj2->GetName();
echo "<hr/>";
$TmpObj3=new ExtObj('控件3');
echo $TmpObj3->GetName();
echo "<hr/>";
$TmpObj1->GetArrList();
echo "<hr/>";
输出:
在上面的例子中:
1、$ID是静态私有变量,为类所有,调用方式:self::$ID
2、$name是受保护变量,为类自身和子类所有,调用方式:$this->name
3、调用父类方法(公用或者受保护方法),调用方式:parent::GetID()
4、$this指对象本身,一般使用它来调用当前类的正常属性和方法;self指当前类本身,一般使用它来调用当前类的静态属性和方法;parent指当前类的父类,一般使用它调用父类的正常方法和属性。