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参数的类型不同
多态
多态概念:当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,在调用该方法的时候所表现出的不同,我们称为多态.
运行多态
编译多态
编译多态就是重载
多态发生在编译的时候产生了不同就是重载