【PHP学习笔记(七)】面向对象编程

类和对象的介绍

Java学习笔记(二)类和对象,编程思想不管在哪门语言都是一样的。

类的基本操作

类的声明

  • 声明格式
    <?php
    权限修饰符 class 类名{
    类的内容;
    }
    ?>
    
  • 常见的修饰符包括public、private、protected,作用和Java类似, 不过PHP默认修饰符是public(省略修饰符的时候)

成员属性

  • 成员属性即在类中声明的变量
  • 声明格式
    public class Student{
    public $name; 
    }
    
  • 成员属性必须使用修饰符,包括public、private、protected等,如果没有特定的意义,仍然需要使用var关键词修饰。另外,在声明类的成员属性时,不可以进行赋值操作

成员方法

  • 成员方法即在类中声明的函数
  • 声明格式
    class Student{
     public $name;
     function GetIp{
     //多行代码
     }
    }
    

类的实例化

  • 语法:$变量名=new 类名称([参数]);

访问类中的成员属性和方法

  • 访问类中的成员属性和方法,需要使用运算符“->”
  • 语法:
    $变量名= new 类名称();
    $变量名 -> 成员属性= 值;
    $变量名 -> 成员方法
    
  • 还可以使用以下特殊方法
    • $this:存在于类中的每一个成员方法中。它是一个特殊的对象引用方法。成员方法属于哪个对象,$this引用就代表哪个对象,主要作用是专门完成对象内部成员之间的访问
    • 操作符“::”:可以在没有任何声明实例的情况下访问类中的成员
      • 语法格式:关键字:: 变量名/常量名/方法名
      • 关键字主要包括3种。
        • parent:表示可以调用父类中的成员变量、常量和成员方法
        • self:表示可以调用当前类中的常量和静态成员
        • 类名:表示可以调用本类中的常量、变量和方法

构造方法和析构方法

构造方法存在于每个声明的类中,主要作用是执行一些初始化任务。如果类中没有声明构造方法,那么会默认的生成一个没有参数且内存为空的构造方法

声明格式(PHP5之后,之前的不做介绍)

function __construct([mixed args]){
//方法的内容
}

析构方法:对象被销毁的时候调用执行的,但是因为PHP在每个请求的最终都会把所有的资源释放,所以析构方法的意义是有限的

function __destruct(){
//方法的内容
}
  • PHP具有辣鸡回收机制,可以自动清除不再使用的对象,析构方法是在辣鸡回收程序前被调用的方法,是PHP编程中的可选内容
  • 不过,析构方法在某些特定行为中还是有用的,比如在对象被销毁时清空资源或者记录日志信息
  • 这两种情况下,析构方法可能被调用执行
    • 代码运行时,当都所有的对于某个对象的reference(引用)被毁掉的情况下
    • 当代码执行到最终,并且PHP停止请求的时候

访问器

这是一个很好用的方法(accessor),称为访问器。由于OOP思想并不鼓励直接从类内部访问类的属性,以强调封装,所以可以使用__get和__set方法来达到此目的。无论何时,类属性被访问和操作时,访问方法都会被激发,通过使用它们,可以避免直接对类属性的访问

类的继承

继承(Inheritance)是OOP中最为重要的特性和概念。父类拥有其子类的公共属性和方法。子类还拥有自己独特的属性和方法

语法格式

class 子类名称 extends 父类名称{
//子类成员变量列表
function 成员方法(){
//方法内容
}
}

抽象类和接口

抽象类和接口都是特殊的类,它们不能被实例化

抽象类

  • 抽象类只能作为父类使用,使用abstract关键字类声明
  • 语法格式
    abstract class 抽象类名称{
     //抽象类的成员变量列表
     abstract function 成员方法1(参数);
     abstract function 成员方法2(参数);
    }
    
  • 抽象类与普通类的区别在于,抽象类的方法没有方法内容,而且至少包含一个抽象方法。另外,抽象方法也必须使用关键字abstract来修饰,而且抽象方法后必须有分号

接口

  • 继承特性简化了对象、类的创建,增加了代码的可重用性。但是PHP只支持单继承,如果想实现多继承,就需要使用接口
  • 接口类通过关键字interface来声明。接口中不能实现声明变量,只能使用关键字const声明为常量的成员属性。接口中声明的方法必须是抽象方法,并且接口中所有的成员都必须是public的访问权限
  • 语法格式
    interface 接口名称{
      //常量成员
      //抽象方法
    }
    
  • 与继承使用extends关键字不同的 是,实现接口使用的是implements关键字
    • class 实现的接口名 implements 接口名称
    • 实现接口的类必须实现接口中声明的所有方法,除非这个类被声明为抽象类

面向对象的多态性

多态性是指同一操作作用于不同类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果

实现多态的方法

  • 通过接口实现多态
  • 通过继承实现多态

匿名类(PHP7)

即没有名称的类,只有在创建时用new语句类声明它们,PHP7支持通过new class来实例化一个匿名类。

人已赞赏
PHP编程语言

【PHP学习笔记(六)】管理日期和时间

2020-3-26 16:27:59

PHP编程语言

【PHP学习笔记(八)】错误处理和异常处理

2020-3-30 15:40:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索