首页 > 技术文章 > 面向对象三大特性(面试经常问)--2017-04-18

chenguanai 2017-04-19 10:37 原文

 一、封装

  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),该引用在调用方法时表现出来的不同

 子类可以代替父类

推荐阅读