首页 > 代码库 > 面向对象-上

面向对象-上

面向对象

  面向对象是一种编程思想,同面向过程一样也是封装,但是不一样的是面向对象的封装依据主体,也就是说每一个封装包代表一个主体,而其中的变量值为主体的属性,函数为主体实现其功能的方法。

  基本格式:

    class 类名{属性(变量),方法(函数)};

    var_dump(对象)

           只能打印出对象的非静态属性

           无法打印出静态属性、类常量

    1.使用class来定义类名

    2.定义属性跟定义变量一样,方法跟函数一样

             2.1属性和方法的声明有三种模式:public | protected | private

                     public:公共的,当前类内、继承链内、类外

                     protected:受保护的,当前类内、继承链内

                     private:私有的,当前类内

             2.2属性访问格式:对象变量->属性名

             2.3方法调用格式:对象变量->方法名()

             2.4 $this为伪对象,代表调用当前所属类的对象

                     2.4.1 伪对象示例:

   技术分享

  技术分享

 

3.类名使用时需要先实例化

         3.1类名实例化为对象格式:$对象名 = new 类名

         3.2此时,($对象名)被称为一个对象。

4.构造方法

         4.1在实例化(对象调用类)之后,直接对其属性初始化(赋值)。

         4.2基本初始化:

   技术分享

  技术分享

 

         4.3构造方法:

   技术分享

         关于函数__construct,当一个类被实例化后,便自动生成__construct函数,所以在类中设置了该方法后,便可以直接在类的实例化之时直接初始化类的属性。

         目前版本依旧支持用类名student代替__construct,具有同样的作用,但不推荐使用。

5.析构方法

         public function __destruct(){}

         在所属类的对象结束之前由系统自动调用并运行,一般用于释放对象所占资源。

6.对象克隆

         新对象 = clone 已有的对象

         __clone(){}

                   在类被克隆时系统自动调用。用于在克隆类时修改类中属性的值。写入被克隆的类中

7.instanceof

         判断对象是否为某一个类的实例

         格式:对象变量 instanceof 类名        (返回值布尔型)

8.静态成员

         静态属性

                  各对象共用的属性(值),同个班级的学生中,班级这个属性

                   定义格式:public static $属性名

                  访问语法:类名::$静态属性名

                   类内部访问静态属性可以使用self关键字代替类名

静态方法

                  public static function 方法名(){}

                 调用时不能使用$this

类常量

         定义格式:

                  const 常量名=值;

                   前不需要加(public | protected | private)声明

         访问:

                  类名::常量名;

                   类名同样可以用self替代

类文件自动加载函数

当PHP文档遇到使用类语句时,会自动调用函数__autoload,并且函数的参数自动代入所需加载类的类名。

         function __autoload($class_name){

include ‘./’.$class_name.’.class.php’;

}

spl_autoload_register(‘函数名’);

         依次按照注册语句的顺序查找

         注册语句必须发生在实例化语句之前

         注册语句使用后,系统默认的__autoload将失效,需要再次注册__autoload才能正常使用

spl_autoload_register(array($对象名,’方法名’));          //非静态方法注册

spl_autoload_register(array(类名,’方法名’));                 //静态方法注册

         = spl_autoload_register(‘类名::方法名’);

数据的序列化与反序列化

         向文件写入数据:file_put_contents(文件地址,写入的数据)

                   返回值:写入字符串的字节长度

         从文件读取数据:file_get_contents(文件地址)

 

         serialize()

                   将原数据转换为可以用于保存和传输的字符串数据

         unserialize()

                   将序列化后的字符串数据转换为原始数据

         __sleep()

                   触发:在序列化一个对象的时候

                   函数内容:return array(元素值为需要序列化的属性值)

         __wakeup()

                   触发:当对象反序列化的时候

                   作用:在对象反序列化的时候,完成该对象的初始化工作

类继承

         关键字:extends

         说明:     类1继承类2,那么类1将获得类1的所有成员及特征(包括属性和方法)

          继承的实质就是子类能够使用父类的属性和方法,但是并不能修改,因此子类的内容在物理上并不会新增属性和内容,仅仅只是把父类的属性和方法的使用链接给了子类。

                 子类调用父类的方法,作用的为子类;若希望作用的为父类,则需要使用格式:父类名::父类属性

          parent(代表所在类的父类) 相当于self(代表所在的类)

                当子类的属性或方法与父类重复时,那么在子类中子类的属性或方法将覆盖父类,但是作用范围仅限子类,父类的属性和方法并不会改变,只是子类在应用这些重复的属性或方法时,调用的是子类自己的。

单例模式(三私一公)

         使某些类只能被实例化一次

  1. 防止用户通过new来实例化对象

    通过私有化(private)预定义方法__construct

   技术分享

  1. 定义公开方法使得该类能被实例化
    1. 定义一个属性,用于存放实例化的对象

   技术分享

  1. 定义一个用于实例化对象,该方法为静态且公开。
  2. 方法内容:

    调用时,判断该class是否已经被实例化,判断公式为:

           !self::$instance instanceof self

           判断当前类的$instance(对象)是否属于当前类

           ==判断$instance中是否已经存储有了该类的对象

           ==判断该类是否已经实例化

   技术分享

  1. 把方法__clone方法私有化

   技术分享

 

面向对象-上