PHP面向对象 三大特性

1.封装

目的:就是为了让类更加安全

做法:

 1 要将成员做成私有的

 2 在类里面做方法来间接访问成员变量

 3 在方法里面加控制

 

简单的:

第一个魔术方法:给变量赋值的        __set

function __set($n,$v)    第一个参数变量名,第二个参数变量值

{  

                if($n=="age" )                       加限制条件

            {

                    if($v>18 && $v<50)

                  {

                      $this->$n =$v;

                  }

             }

            else

              {

                    $this->$n =$v;

              }

        }

 

$r->age =30;      自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数

第二个魔术方法:用来取变量值的   __get

function __get($n)

{

         return $this->$n;    直接返回

}

 

echo $r->sex;   写这个的时候可以自动调用__get(),将变量名当做参数,没有提示,自己写出来用

 

 

$r = new Ren("男");

$r->__set("age",30);

$r->name ="张三";   也可以

繁琐的:

class Ren

{

         public $code;       人员代号

         private $name;    人员姓名

         private $sex;        人员性别

         private $age;       人员年龄     做成了私有的,怎么实现访问

         function __construct($s)       构造方法,用来初始化性别

        {

              $this->sex =$s;

        }

        造一个修改年龄的方法

        function SetAge($a)

       {

          if($a>18 && $a<50);   加控制

              {

              $this->age=$a;

              }

       }

  造一个获取age值得方法

        function GetAge()

        {

             teturn $this->age;

        }

}

 

造对象

$r = new Ren("男");

$r->SetAge(20);   

var_dump($r);

 

例:

class Dog

{

      public $name;

      function Jiao()

        {

             echo $this->name."在叫";

         }

       function SetName($n)

       {

             $this->name =$n;

              return $this;      <-----   加了       连续去调    后期很多都是这种调用方式,返回该对象,继续调下一个

       }

}

$d = new Dog();

$d->SetName("旺财")->Jiao();     

2.继承

1 父类

2 子类    可以继承父类的一切

特点:单继承,一个子类只能有一个父类,一个父类可以派生多个子类

class Ren

{

       public $name;

       function Say()

      {

           echo $this->name."正在说话";

      }

}

class China extends Ren              extends    <----    实现继承

{

         子类对父类的方法进行重写

         function  Say()

          {

                怎么在子类里调父类的成员

                parent::Say();        父类里面的内容拿过来            

                echo "你好";     

           }

         function Run()

         {

               echo $this->name."正在跑步";

         }  

}        

class America extends Ren

{

          echo "hello";

}

$c = new China();

$c->Say();

$a = new America();

$a->Say();

var_dump($c);  

override  重写 

overload  重载

可以使类里面的某个方法产生多种效果,根据传入的参数不同可以执行不同的逻辑

重载也是多态的一种,编译多态

例:

echo rand(0,10); 随机数

echo date("Y-m-d");   生成当前时间

 

3.多态

概念:当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同,称为多态

条件

运行多态,在运行的时候出现的

1 要有继承

2 父类引用指向子类实例

  父类引用:定义了一个变量  ,类型必须是父类的类型

                  $r = new Ren();

3 要有重写

4 调重写的方法

 

posted @ 2016-12-12 14:50  欧元  阅读(173)  评论(0编辑  收藏  举报