一、三大特性之三 多态性(在php中表象不明显)
1.概念:当父类引用指向子类实例时,由于子类对父类函数进行了重写,导致我们在使用该引用去调用相应的方法显示出的不同。
2.发生条件:1.必须有继承 2. 子类必须要对父类的方法进行重写
eg:
class Ren
{
public $name;
public $sex;
function Say()
{
echo "Hello";
}
}
class China extends Ren
{
function Say()
{
echo "你好";
}
}
$r=new Ren();//$r代表Ren的引用
$r1=new China();//$r1代表China的引用
二、函数重载:
1.概念:同一个函数名重写多个功能,根据所写的参数不同加载不同的功能
2.要求:1. 所写函数名一样 2. 参数的个数不同 3. 参数个数相同时,参数类型不同
eg:
class Ren
{
public $name;
public $sex;
function Say()
{
echo "Hello";
}
functin Say($a)
{
echo $a."Hello";
}
functin Say($a,$b)
{
echo $a.$b."Hello";
}
}
$r=new Ren();
//重载:
$r->Say();
$r->Say("a");
$r->Say("aa","bb");
附:php是弱类型语言,所以没有重载
php里面有可变参数的函数
三、__tostring()方法:
可以输出类的一些描述,它是在直接输出对象引用时自动调用的方法
class Ren
{
public $name;
public $sex;
function Say()
{
echo "Hello";
}
function __tostring()
{
echo "这个对象包含name和sex,一个Say方法";
}
}
$r=new Ren();
echo $r;
若不使用__tostring()方法,输出$r会报错:
Catchable fatal error: Object of class Ren could not be converted to string in C:AppServwwwUntitled-1.php on line 31
使用__tostring()方法后,输出:这个对象包含name和sex,一个Say方法
四、clone对象的克隆
class Ren
{
public $name;
public $sex;
function Say()
{
echo "Hello";
}
function __clone() //克隆对象时自动执行
{
$this->name="李四";//这里的$this指复本,克隆出的新对象
}
}
$r=new Ren();
$r->name="张三";
echo $r->name; //输出结果:张三
$r1=clone $r;
echo $r1->name; //输出结果:张三李四