面向对象三大特性(面试经常问)--2017-04-18
一、封装
1、目的:是为了使类更加安全
2、步骤:
(1) 将成员变量变为私有
(2) 做一个成员方法间接访问
(3) 在该方法里面来加限制条件
第一种:
class Ren
{
private $age;
function setAge($n) -------------给变量赋值
{
if ($n>=18 && $n<=50){
$this->age=$n;
}
}
function getAge() -------------取值
{
return $this->age;
}
}
$r = new Ren();
$r->setage(12); -------------给变量赋值
echo $r->getName(); -------------取值
缺点: 如果成员变量太多,就需要赋值取值很多次;代码工程量大。
第二种: 采用魔术方法 (.net中引用成员属性,php中没有,所以采用魔术方法)
class Ren
{
private $age;
private $name;
//魔术方法,给变量赋值
function __set($n,$v) //$n:变量名称 $v:变量值 {
if ($n=="age"){ //加条件
if ($n>=18 && $n<=50)
{
$this->$n=$v;
}
}
else{
$this->$n=$v;
}
}
//魔术方法 取变量值
function __get($n){
return $this->$n;
}
$r = new Ren();
$r->__set("age",12); -----第一种赋值方法
$r->age=20; ------第二种赋值方法
$r->name = "咋";
echo $r->name; ------------直接调用
2、继承 子类可以继承父类的一切
特点:单继承 -------- 一个类只能有一个父类,一个父类可以有多个子类
Override parent::run()
3、(运行) 多态 区别: 重载表现的是编译多态
当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写(override),该引用在调用方法时表现出来的不同
子类可以代替父类