php面向对象三大特性
①封装
封装的目的:为了让类更安全.
<body> <?php class Ren{ public $name; public $sex; public $age;//如果不想在外界随便修改和访问这个变量,那就需要封装 } $r= new Ren(); ?> </body>
类的成员变量都要封装,封装的函数前面是public,
封装的方法:
1将成员变量全部变为private (也就是私有的)
<body> <?php class Ren{ public $name; public $sex; private $age; } $r= new Ren(); ?> </body>
2在类里面做一个成员方法来间接访问
<body> <?php class Ren{ public $name; public $sex; private $age; public function setage($age){ }//用函数做一个成员方法 } $r= new Ren(); ?> </body>
3在该方法里面加限制条件
<body> <?php class Ren{ public $name; public $sex; private $age; public function setage($age){ if($age>=18 && $age<=50){ $this->age=$age; } } } $r= new Ren(); $r->setage(20); var_dump($r); ?> </body>
显示:
魔术方法
<body> <?php class Ren{ public $name; public $sex; private $age;//public----private public function __set($name,$value){//$name变量名$value变量值 if($name == "age"){ if($value>=18&&$value<=50){ $this->$name = $value; } } else{ $this->$name = $value; } } } $r = new Ren(); $r->name = "张三"; $r->age = 20;//自动调用__set var_dump($r) ?> </body>
显示:
继承
概念:子类可以继承父类的一切
特点:单继承 (一个子类只能有一个父类,一个父类可以有多个子类)
<body> <?php class Ren{ public $name; } class China extends Ren{//该类(china类继承自ren类),继承使用的关键字:extends. } $c= new China(); var_dump($c); ?> </body>
显示:
china对象里面是存在$name这个成员变量的,这个成员变量就是继承自ren类里面的.
方法的重写
<body> <?php class Ren{ function say(){ echo "人在讲话"; } } class China extends Ren{ function say(){ echo "中国人在讲话"; } } $c= new China(); $c->say(); ?> </body>
显示:
parent关键字
parent关键字在类里面代表的是父类,如果在子类重写的方法里面想要调用父类的方法,则需要使用关键字来调用.
<body> <?php class Ren{ function say(){ echo "人在讲话"; } } class China extends Ren{ function say(){ parent::say(); echo "中国人在讲话"; } } $c= new China(); $c->say(); ?> </body>
显示:
函数重写的名词:over ride
重载的名词:over load
重载目的:一个方法实现多个功能
重载的条件:
1方法名必须相同
2参数的个数不同
3参数的类型不同
多态
多态概念:当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,在调用该方法的时候所表现出的不同,我们称为多态.
运行多态
编译多态
编译多态就是重载
多态发生在编译的时候产生了不同就是重载