zoukankan      html  css  js  c++  java
  • PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

      前  言

     OOP 

      学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)。

    1  PHP中的抽象类与抽象方法
       
         1、什么是抽象方法?
                  没有方法体 {} 的方法,必须使用abstract 关键字修饰。这样的方,我们叫做抽象方法。
                        abstract function say(); //    抽象方法

              2、什么是抽象类?
               包含抽象方法的类就叫抽象类。抽象类必须使用abstract关键字修饰。
                      abstract class Person{}

              3、抽象类的注意事项
                    ①    抽象类可以包含非抽象方法;
                    ② 包含抽象方法的类,一定是抽象类;
                        抽象类,并不一定必须包含抽象方法;
                    ③ 抽象类,不能实例化。
                      (抽象类中可能包含抽象方法,抽象方法没有方法体,实例化调用没有意义。)
                   
                       我们使用抽象类的目的!就是限制实例化!!!        

              4、 子类继承抽象类,那么子类必须重写父类的所有抽象方法。除非子类也是抽象类。
             
              5、使用抽象类的作用?
                  ① 限制实例化。(抽象类是一个不完整的类,里面的抽象方法没有方法体,所以不能实例化)
                  ② 抽象类为子类的继承提供一种规范。子类继承一个抽象类,则必须包含并且实现抽象类中已定的抽象方法。
             
             
    2  静态属性和静态方法
      
         1、static
                  ① 可以修饰属性和方法,分别称为静态属性、静态方法,也叫类属性、类方法;
                  ② 静态属性、静态方法,只能使用类名直接调用。
                      使用"类名::$静态属性" 、 "类名::静态方法()"
                      Person::$sex;  Person::say();
                  ③ 静态属性、方法,在类装载时就会声明。先于对象产生;
                  ④ 静态方法中,不能调用非静态属性或方法;
                    非静态方法,可以调用静态属性或方法;    
                  (因为静态属性和方法在类装载时就已经产生,而非静态的属性方法、此时还没有实例化诞生)
                  ⑤ 在类中,可以使用self关键字,代指类名。
                      class Person{
                      static $sex = "nan";
                      function say(){
                          echo self::$sex;
                          }
                      }
                  ⑥ 静态属性是共享的。也就是new很多对象也是共用一个属性。

       2、final
              ① final 修饰类,此类为最终类,不能被继承;
              ② final    修饰方法,此方法为最终方法,不能被重写!
              ③ final 不能修饰属性。
         
          3、const关键字;
                在类中声明常量,不能使用define()函数!必须使用const关键字。
               与define()声明类似,const关键字声明常量不能带$,必须全部大写!
               常量一旦声明,不能改变。调用时与static一样,使用类名帝爱用 Person::常量。
         
          【小总结】  几种特殊操作符
          1、 .      只能连接字符串; "".""
          2、 => 声明数组是,关联键与值["key"=>"value"]
          3、 -> 对象($this new出的对象)低啊用成员属性、成员方法。
          4、  : :  ① 使用parent关键字,调用父类中的同名方法;parent::say();
                    ② 使用类名(和self)调用类中的静态属性、静态方法、以及常量。
         
         
             
    3  PHP中的单利模式(单态模式)
       
       单利模式也叫单态模式
         
         
           可以保证,一个类只能有一个对象实例。
         
           实现要点:
                ① 构造函数私有化,不允许使用new关键字创建对象。
                ② 对外提供获取对象的方法。在方法中判断对象是否为空,如果为空则创建对象并返回,如果不为空直接放回,
              ③ 实例对象的属性以及过去对象的方法必须都是静态的。
                ④ 之后,创建对象只能使用我们提供的静态方法。      $s1 = Singleton::getSingle();
                
             
     1 class Singleton{
     2         private static $single=null;
     3         private function __construct(){}
     4         static function getSingle(){
     5             if(!self::$single){
     6                 self::$single = new self();
     7             }
     8             return self::$single;
     9         }
    10         function __destruct(){
    11             echo "啊,我被销毁了。";
    12         }
    13     }
    14     
    15     $s1 = Singleton::getSingle();
    16     $s2 = Singleton::getSingle();
    17     $s3 = Singleton::getSingle();
    18     $s4 = Singleton::getSingle();
    单利模式简单的代码
    4  串行化与反串行化(序列化与反序列化)
       
                1、串行化:将对象通过一系列操作,转化为一个字符串你的过程,称为串行化;
                  2、反串行化:将串行化后的字符串,再转为对象的过程,称为反串行化;
                  3、什么时候使用串行化?
                      ① 对象需要在网络中传输的时候;
                      ② 对象需要在文件或者数据库中持久保存的时候;
                  4、怎么实现对象串行化与反串行化?
                  串行化: $str = serialize($duixiang);
                  反串行化: $duixiang = unserialize($str);
                  5、__sleep()魔术方法:
                      ① 当执行对象串行化的时候,会自动执行__sleep()函数;
                      ② __sleep()函数要求返回一个数组,数组中的值,就是可以串行化的属性;不在数组中的属性,不能被串行化;
                      function __sleep(){
                      return array("name","age");//只有name/age两个属性可以串行化
                      }
                  6、__wakeup()魔术方法:
                      ① 当反串行化对象时,自动调用__wakeup()方法;
                      ② 自动调用时,用于给反串行化产生的新对象属性,进行重新复制;
                      function __wakeup(){
                          $this->name = "李四";
            
    5  约束类型 
       
        1、类型约束:是指在变量前,加上数据类型,用于约束此变量只能存放对应的数据类型.(这种操作常见于强类型语言,在PHP中,只能实现数组和对象的类型约束)
          2、如果类型约束为某一个类,则本类以及本类的子类对象,都可以通过;
         
          3、在PHP中,类型约束,只能发生在函数的形参中。
              class Person{}
              class Student extend
          
           function func(Person $p){
                  //约束函数的参数,只接受Person类及Person子类
                 echo "111";
                 echo $p->name;
                 }
              func(new Person()); √
              func(new Student()); √
           func("111");    ×
         
              形如 new Person();的形式,我们称其为“匿名函数”;
        
             
    6  魔术方法小总结
       
      1、__construct(): 构造函数,new一个对象时,自动调用
          2、__destruct(): 析构函数,当一个对象被销毁前,自动调用
          3、__get():访问类中私有属性时,自动调用。传递读取的属性名,返回$this->属性名
          4、__set():给类的私有属性赋值时,自动调用。传递需要设置的属性名和属性值
          5、__isset():使用isset()检测对象私有属性时,自动调用。传递检测的属性名,返回isset($this->属性名);
          6、__unset():使用unset()删除对象私有属性时,自动调用。传递删除的属性名,方法中执行unset($this->属性名);
          7、__toString():使用echo打印对象时,自动调用。返回想要打印对象时,现实内容;返回必须是字符串;
          8、__call():调用一个类中未定义或未公开的方法时,自动调用。传递被调用的函数名,和参数列表数组;
          9、__clone():当使用clone关键字,克隆一个对象时,自动调用。作用是为新克隆的对象进行初始化复制;
          10、__sleep():对象序列化时,自动调用。返回一个数组,数组中的值就是可以序列化的属性。
          11、__wakeup():对象反系列化时,自动调用。为反序列化新产生的对象,进行初始化复制;
          12、__autoload():需要在类外部声明函数。当实例化一个为生命的类时,自动调用。传递实例化的类名,可以使用类名自动加载对应的类文件。
        
         

    学习时候的笔记,可能会有一些错误的地方,欢迎各位的批评指点。

    反思,复盘,每天收获一点---------------------期待更好的自己

  • 相关阅读:
    Kernel parameter requirements ( Linux DB2)
    db2 backup export
    db2 活动日志激增的原因分析处理
    db2 应用的最常见状态(转)
    db2 reorg到底需要多少表空间(转)
    HDLM for AIX安装
    db lock
    db2 tablespaces table bufferpools reorgs
    AIX文件系统和存储部署(转)
    真正看网络代码
  • 原文地址:https://www.cnblogs.com/zhuanzhibukaixin/p/6980364.html
Copyright © 2011-2022 走看看