php中的多态性,相对于封装和继承的特点稍微有一些复杂,我感觉多态性是建立在函数的重载之上的
为了简洁表达,把他们写到了下面的代码里面:
<?php
class FunctionRepeat{
public function __construct(){
echo __CLASS__."<br/>"; //显示当前行所在的类名
}
public function Myfunction1(){
echo "这是函数重载---1"."<br/>";
}
public function Myfunction2(){
echo "这是函数重载---2"."<br/>";
echo __FUNCTION__."<br/>"; //显示当前行所在的函数名称
}
//这是php提供函数重载的方法,比较麻烦
function __call($method,$p){
if($method = "test"){
if(count($p) == 1){
$this->Myfunction1();
}else if(count($p)==2){
$this->Myfunction2();
}
}
}
}
$myobj_1 = new FunctionRepeat();
$myobj_1->test("1",2);
//其它的魔术方法,不区分大小写
echo __LINE__."<br/>";//显示当前行数
echo __FILE__."<br/>";//显示当前文件路径
echo __DIR__."<br/>";//显示父路径
?>
<?php
class A{
public $name;
public $age;
function show(){
echo "11111111111"."<br/>";
}
}
class B extends A{
function show(){ //子类定义的方法被优先访问,但是父类方法并没有被销毁
echo "22222222222"."<br/>";
echo parent::show();
}
}
$myobj_1 = new B();
$myobj_1->show("cad",1);
?>