zoukankan      html  css  js  c++  java
  • 【php】面向对象(三)

    知识点关键词:FSCICATS
    一、 f => final:
      a) 是一个修饰符,用来修饰类和成员方法
      b) 使用final修饰符修饰的类不能被继承,使用final修饰符修饰的成员方法,不能被重写;
      c) 好比是专利、知识产权
    二、 S => static:
      a) 是一个修饰符,用来修饰成员属性和成员方法
      b) 修饰成员属性:
        i. 使用的方法:static修饰符可以配合PPP修饰符进行修饰成员属性修饰
          1. Public static $name;
        ii. 作用:其实就是将使用静态修饰符修饰的成员属性变为共有存在的属性
        iii. 访问形式:
          1. 在类的内部:self::属性名;
          2. 在类的外部:类名::属性名;
      c) 修饰成员方法:
        i. 使用的方法:static修饰符可以配合PPP修饰符进行成员方法修饰
          1. Public static function sing();
        ii. 注意事项:被static修饰符所修饰的成员方法,只能操作静态成员属性,和静态成员方法,也就是说在静态成员方法中不能有$this
        iii. 访问形式:
          1. 在类的内部:self::方法名();
          2. 在类的外部:类名::方法名();
    三、 单例模式:
      a) 目标:想在脚本当中只实例化一次该对象
      b) 步骤:
        i. 将构造方法私有化
        ii. 定义判断是否为第一次实例化的一个静态成员属性,用于存放实例化的对象的
        iii. 定义静态成员方法,将实例化结果返回到调用出

     1 //单例模式
     2 class Obj{
     3     //定义静态成员属性
     4     public static $o = null;
     5 
     6     //构造方法私有化
     7     private function __construct(){
     8 
     9     }
    10 
    11     //在类的内部去实例化本对象
    12     public static function getObj(){
    13         if(self::$o==null){
    14             self::$o = new Obj();
    15         }
    16         return self::$o;
    17     }
    18 
    19 }
    20 
    21 $a = Obj::getObj();
    22 $b = Obj::getObj();
    23 $c = Obj::getObj();
    24 ar_dump($a);        //D:wampwwwlamp183lesson30_oop35.php:25:
    25 object(Obj)[1]
    26 var_dump($b);        //D:wampwwwlamp183lesson30_oop35.php:25:
    27 object(Obj)[1]
    28 var_dump($c);        //D:wampwwwlamp183lesson30_oop35.php:25:
    29 object(Obj)[1]

    四、 C => const
      a) 这是一个关键字
      b) 作用:用来定义一个常量
      c) 格式:const 常量名 = 常量值;
      d) 注意:
        i. Define可以在流程控制当中定义
        ii. Const不可以在流程控制当中定义
        iii. 常量可能的值:四种标量类型的值+null空型
      e) 类常量的访问方式:
        i. 在类的内部:self::常量名
        ii. 在类的外部:类名::常量名
    五、 I => instanceof
      a) 是一个运算符
      b) 作用:用来判断一个对象是否属于该类或父类
      c) 格式:对象 instanceof 类名; 如果为真说明该对象属于该类,否则不属于
      d) 滴血认亲

     1 class GrandPa{
     2 
     3 }
     4 
     5 class Father extends GrandPa{
     6 
     7 }
     8 
     9 class Son extends Father{
    10 
    11 }
    12 
    13 class Gebi{
    14    
    16 }
    17 
    18 //实例化一个儿子类
    19 $me = new Son();
    20 
    21 //查看对象是否是由Son类实例化的
    22 var_dump($me instanceof Son);        //D:wampwwwlamp183lesson30_oop37.php:24:boolean true
    23 var_dump($me instanceof Father);    //D:wampwwwlamp183lesson30_oop37.php:25:boolean true
    24 var_dump($me instanceof GrandPa);    //D:wampwwwlamp183lesson30_oop37.php:26:boolean true
    25 var_dump($me instanceof Gebi);        //D:wampwwwlamp183lesson30_oop37.php:27:boolean false

    六、 C => clone
      a) 是一个关键字,可以将一个对象克隆出另一份
      b) 格式:$a = clone $b;
      c) 魔术方法:__clone
        i. 自动执行场景:当我们对一个对象进行克隆的时候,会自动调用该方法
      d) 作用:为了初始化当前新创建出来的对象的信息

     1 class Twins{
     2 
     3     //成员属性
     4     public $name;
     5     public $age;
     6 
     7     //构造方法
     8     public function __construct($name,$age){
     9         $this->name = $name;
    10         $this->age = $age;
    11     }
    12 
    13     //成员方法
    14     public function dance(){
    15         echo '我正在跳舞中,么么哒……';
    16     }
    17 
    18     //当我们对一个对象进行克隆的时候,会自动调用的一个方法
    19     public function __clone(){
    20         $this->name = 'Mandy';
    21         $this->age = 15;
    22     }
    23 
    24 }
    25 
    26 $sandy = new Twins('sandy',15);
    27 $mandy = clone $sandy;    //执行了一个克隆
    28 
    29 var_dump($sandy);
    30 //结果
    31 object(Twins)[1]
    32   public 'name' => string 'sandy' (length=5)
    33   public 'age' => int 15
    34 
    35 var_dump($mandy);
    36 //结果
    37 object(Twins)[2]
    38   public 'name' => string 'Mandy' (length=5)
    39   public 'age' => int 15

    七、 A => __autoload
      a) 这是一个魔术函数
      b) 触发场景:当我们实例化一个不存在的类的时候,或者继承一个不存在的类的时候,会自动调用
      c) Spl_autoload_register:可以对__autoload函数进行重命名,重命名之后,则必须使用新名进行操作

     1 // 魔术函数__autoload,在实例化或继承一个不存在的类时,自动调用
     2 function __autoload($name){
     3     if(file_exists('./Libs/'.$name.'.class.php')){
     4         include './Libs/'.$name.'.class.php';
     5     }elseif(file_exists('./Class/'.$name.'.class.php')){
     6         include './Class/'.$name.'.class.php';
     7     }
     8 }
     9 
    10 // 将类文件引入
    11 include './Libs/upload.class.php';
    12 include './Libs/model.class.php';
    13 
    14 // 实例化不存在的类时
    15 $a = new User();
    16 var_dump($a);
    17 //结果
    18 object(User)[1]

    八、 T => __toString
    a) 是一个魔术方法
    b) 触发场景:当我们对一个对象进行字符串操作的时候会自动进行调用
    c) 作用:代替对象进行字符串输出
    d) 注意:必须返回一个字符串类型的值

     1 //定义一个
     2 class SuperMan{
     3 
     4     //成员属性
     5     public $name;
     6     public $age;
     7     public $tall;
     8 
     9     //成员方法
    10     public function __construct($name,$age,$tall){
    11         $this->name = $name;
    12         $this->age = $age;
    13         $this->tall = $tall;
    14     }
    15 
    16     public function fly(){
    17         echo '我正在飞……带你装X带你飞,带你飞进垃圾堆……';
    18     }
    19 
    20     //当我们使用echo对对象进行输出时,会自动调用
    21     public function __tostring(){
    22         return '我是超人,我怕谁!!';
    23     }
    24 
    25 }
    26 
    27 $kent = new SuperMan('肯特',45,'185cm');
    28 
    29 echo $kent;        //我是超人,我怕谁!!

    九、 S => serialize(串行化、序列化)
      a) 是一个函数
      b) 它能够将一个数组或一个对象变成字符串
      c) 将数组转换成字符串
        i. a:4:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"orange";i:3;s:5:"xigua";}
          1. a:变量的数据类型 a => array
          2. 4:数组中的单元格数 有4个单元、有4个元素
          3. I:数组中第一个元素的下标类型 I => int
          4. 0 :下标的值
          5. S : 数组中第一个元素的值的类型 s => string
          6. 5 :数组中第一个元素的值的长度 单位:字节
          7. Apple:值的内容
      d) 将对象转换成字符串:
        i. O:8:"SuperMan":3:{s:4:"name";s:6:"海波";s:3:"age";i:18;s:4:"tall";s:5:"180cm";}
          1. O :变量的数据类型 o=>object
          2. 8:类名的成都(字节)
          3. SuperMan:类名
          4. 3:类当中有3个属性
          5. S:第一个属性的类型 s => string
          6. 4:属性名的长度(字节)
          7. Name:属性名
          8. S:属性对应的值的类型 s => string
          9. 6:属性值的长度(字节)
          10. 海波:属性值的内容
      e) 魔术方法:__sleep
        i. 自动执行场景:当我们对一个对象进行串行化的时候,会自动调用
        ii. 作用:可以方便我们对串行化数据的一个筛选
        iii. 注意:该方法返回的必须是一个数组
    十、 U => unserialize(反串行化、反序列化)
      a) 这是一个函数
      b) 作用:可以将串行化的数据反串行化成数组或对象
      c) 魔术方法:__wakeup
        i. 自动执行场景:当我们对一个对象进行反串行化的时候,会自动调用
        ii. 作用:可以方便我们修改对象的成员属性的内容

     1 //定义了一个类
     2 class SuperMan{
     3 
     4     //成员属性
     5     public $name;
     6     public $age;
     7     public $tall;
     8 
     9     //成员方法
    10     public function __construct($name,$age,$tall){
    11         $this->name = $name;
    12         $this->age = $age;
    13         $this->tall = $tall;
    14     }
    15 
    16     //__sleep魔术方法
    17     public function __sleep(){
    18         return array('name','tall');
    19     }
    20 
    21     //__wakeup魔术方法
    22     public function __wakeup(){
    23         $this->name = '仉浩焱';
    24         $this->age = 50;
    25         $this->tall = '140cm';
    26     }
    27 }
    28 
    29 //实例化对象
    30 $haibo = new SuperMan('许超',18,'160cm');
    31 
    32 //将对象串行化
    33 $contents = serialize($haibo);
    34 var_dump($contents);
    35 //结果
    36 string 'O:8:"SuperMan":2:{s:4:"name";s:6:"许超";s:4:"tall";s:5:"160cm";}'
    37 
    38 //反串行化:
    39 $jiji = unserialize($contents);
    40 var_dump($jiji);
    41 //结果
    42 object(SuperMan)[2]
    43   public 'name' => string '仉浩焱' (length=9)
    44   public 'age' => int 50
    45   public 'tall' => string '140cm' (length=5)
  • 相关阅读:
    数据排序
    (一)Spark简介Java&Python版Spark
    醒 了
    祈福
    可以接受失败,但不选择放弃
    烦中偷乐
    Yahoo! UI Library入门
    文章内容的简单优化方法
    Asp.Net网站速度优化
    ASP.NET实现GZIP压缩优化
  • 原文地址:https://www.cnblogs.com/peilanluo/p/6822367.html
Copyright © 2011-2022 走看看