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():需要在类外部声明函数。当实例化一个为生命的类时,自动调用。传递实例化的类名,可以使用类名自动加载对应的类文件。

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

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

时间: 2024-12-14 18:12:15

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结的相关文章

C#中的抽象类和抽象方法

一.抽象类和抽象方法的概念 在基类中的虚方法有时候不可能被调用到,而只是表达一种抽象的概念,用以为它的派生类提供一个公共的界面. C#中引入了抽象类(abstract class)的概念,可以将它定义成抽象方法.将该方法所在的类定义成抽象类. 抽象方法:只包含方法定义,但没有具体实现的方法,需要其子类或者子类的子类来具体实现. 抽象类:抽象类是能够包含抽象成员的类.抽象类只能作为基类使用,不能被实例化. 二.抽象类和抽象方法的使用原则 1  抽象类中可以存在非抽象方法,抽象方法必须包含在抽象类中

类和对象:静态属性、静态方法

在PHP中,使用关键字 static 修饰成员属性和成员方法被称为静态属性和静态方法.静态属性和静态方法不需要在类被实例化的情况下可以直接使用. 静态属性 与普通的成员属性不同,静态属性属于类本身而不属于类的任何实例.静态属性可以被看做是存储在类当中的全局变量,可以在任何地方通过类来访问它们. 由于静态属性不受任何具体对象的限制,所以不需要建立类实例,而可以直接引用类中的静态属性,使用语法格式如下: 类名称::$静态属性名称 其中,符号”::”被称作范围解析操作符,它可以用于访问静态成员.静态方

php静态属性和静态方法学习笔记

在属性和方法前加static修饰可以成为静态属性和静态方法. 静态属性的访问用 类来访问  例如  human::$head 1.类生成完毕,静态属性就已经存在,不需要依赖对象来访问 2.类在内存中只有一个,因此静态属性也只有一个. 普通方法,存放于类内,只有一份 静态方法,也是存放于类内,只有一份. 区别在于,普通方法需要用队形去调动,需要绑定$this,必须要有对象,用对象调动. 而静态方法,不属于哪个对象,属于类,因此不需要用$this去绑定,同过类名就可以调用.

php静态属性和静态方法

php静态属性和静态方法 2012-09-29 10:18 1518人阅读 评论(0) 收藏 举报 phpfunction 本php教程主要是学习php中静态属性和静态方法的使用方法和基本的示例. ·                                 静态属性 静态属性也就是说它的值保持其值,比如在类中实例化了N个对象,那么你可以在构造函数中定义一个静态属性来记住对象的个数.类中的静态属性和静态变量差不多,只不过在类中似乎又多了一个些使用上的限制罢了.让我们看看一般的变量吧: <?

c++第七章-(静态属性和静态方法)

1.静态属性和静态方法 静态方法的调用,ClassName::mothodName(); class Pet { public: Pet(std::string theName); ~Pet(); static int getCount();//公开的静态方法 protected: std::string name; private: static int count;//私有的静态变量 }; class Dog:public Pet { public: Dog(std::string theN

Java静态属性、静态方法、非静态属性、非静态方法的继承问题简单了解

package com.book.web.controller; /**  * 父类  * @author liweihan  *  */ public class Parent { public String normalStr = "父类非静态属性"; public static String staticStr = "父类静态属性"; public String changeStr = "父类-变量"; public static Stri

php之静态属性与静态方法

静态属性用法:static public $var = 1; 从内存角度看,静态属性存放在类内,普通属性存放在对象中,类声明完毕,静态属性就存在,因为类在内存中只有一个,静态也只有一个. 普通属性存放在对象中,用对象->$var来访问,静态属性存放在类内,不依赖对象,没有对象也能访问,用类名::$var来访问,静态属性只有一个,为所有对象共享. 静态方法用法:static public function t(){} 普通方法存放在类内,只有一份,静态方法也存放在类内,也只有一份.区别在于,普通方

static静态属性和静态方法的原理与调用技巧

这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属性和静态方法的调用.分享给大家供大家参考.具体如下: 这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就

java之静态属性和静态方法

前言 静态属性和方法必须用static修饰符 静态属性和非静态属性的区别: 1.在内存中存放位置不同   所有带static修饰符的属性或者方法都存放在内存中的方法区  而非静态属性存放在内存中的堆区 2.出现时机不同   静态属性或方法在没创建对象之前就已经存在  而非静态属性在创建对象之后才存在 3.静态属性是在某个类中的所有对象是共享的 4.生命周期不同  静态属性在类消失之后才销毁  而非晶态属性在对象销毁之后才销毁 5.用法: a.静态属性可以直接通过类名直接访问  非静态属性不能通过