zoukankan      html  css  js  c++  java
  • 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 调重写的方法

  • 相关阅读:
    上传下载---上传
    分页中的难点
    分页的实现
    c3p0-config连接池
    判断
    客户关系管理增删改
    转发和重定向
    dbUtils结果集处理器
    加载配置文件.properties,及面向接口编程的DaoFactory
    jdbc链接数据库mysql
  • 原文地址:https://www.cnblogs.com/zqseven/p/6163378.html
Copyright © 2011-2022 走看看