php类和对象(二)

面向对象第三大特性:多态

概念: 当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致我们在使用该引用取调用相应方法时表现出的不同

条件: 1.必须有继承

2.子类必须对父类的方法进行重写

多态在弱类型语言中表现不明显,在强类型语言中表现比较明显,在php中不用考虑.

class Ren
{
  public $name;
  public $sex;
  function say()
  {
    echo "hello";
  }
}
class China extends Ren
{
  function say()
  {
    echo "你好";
  }
}
$r =new Ren();
$r1 =new China();

多态在强类型语言中可用父类引用指向子类的实例,php不用规定变量的类型,多态不明显.

函数重载:

1.方法名必须一样

2.函数里面参数个数不同

3.如果参数个数相同,类型不同

函数重载只在强类型语言中有,弱类型语言中没有

php是弱类型语言,php有可变参数的函数,且不用规定参数类型,不满足函数重载的条件.

function say()
{
  echo "hello";
}
function say($a)
{
  echo $a."hello";
}
function say($a,$b)
{
  echo $a.$b."hello";
}

三个say()方法,随参数个数不同,调用的函数也不同.

__tostring()方法:   输出类的一些描述

function __tostring()
{
  return "这个对象包含变量name和sex,一个say方法";
}
$r= new Ren();
echo $r;    //输出return值

对象的克隆:

$r=new Ren();

$r->name="张三";

$r1 =clone $r;    //克隆对象

var_dump($r1);

//在克隆时,想要对克隆的新对象中添加一些特殊的东西,需要在Ren类中加入__clone方法

function __clone()

{

  $this->name="李四";     //$this是复本(克隆之后的新对象)

}

echo $r->name;

echo $r1->name;

//输出:张三李四

 

 

posted @ 2016-04-29 11:51  魅影星魂  阅读(171)  评论(0编辑  收藏  举报