深入理解 PHP 面向对象编程(OOP)

本文深入探讨PHP的魔术方法,如__construct(), __destruct()等,及其在面向对象编程中的应用。同时,讲解了面向对象的三大特性:封装、继承、多态,以及访问控制、设计模式和设计原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.魔术方法

魔术方法作用
__construct()当一个对象创建时调用此方法
__destruct()PHP将在对象被销毁前(即从内存中清除前)调用这个方法
__call()当调用一个未定义的方法是调用此访求
__callStatic()当无法通过静态方法访问时自动触发
__get()当调用一个未定义的属性时访问此方法
__set()给一个未定义的属性赋值时调用
__set_state()用var_export()输出一个对象时
__isset()当在一个未定义的属性上调用isset()函数时调用此方法
__unset()当在一个未定义的属性上调用unset()函数时调用此方法
__sleep()串行化的时候用
__wakeup()反串行化的时候调用
__toString()将一个对象转化成字符串时自动调用
__invoke()当将对象当成函数使用的时候自动调用
__clone()想复制一个对象则需要使用clone方法
__autoload()它会在试图使用尚未被定义的类时自动调用

二.魔术常量

魔术常量作用
__DIR__文件所在的目录
__FILE__文件的完整路径和文件名
__LINE__文件中的当前行号
__NAMESPACE__当前命名空间的名称(大小写敏感)
__CLASS__返回对象的类名
__FUNCTION__返回的仅仅是函数的名称
__METHOD__返回的是函数的名称和类名
__STATIC__当你调用class的静态方法时,返回class名称,区分大小写

三.面向对象的特性

  • 封装:隐藏对象的属性和实现细节,对外提供公共的访问方式,以防止数据的随意访问和修改。
  • 继承:通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类。
  • 多态:
    • 1.满足继承关系
    • 2.父类引用变量指向子类对象
    • 3.子类重写父类的方法

四.访问控制

  • public: 既可以让子类使用,也可以支持实例化之后的调用

  • private: 私有类型,只能够是在当前的类中可以被访问到

  • protected: 受保护,访问的权限是只有在子类和当前类才可以被访问到

  • static 属性:

    • 静态方法只能访问其他的静态方法或属性
    • 对静态变量做修改会直接影响到类中
    • 访问静态对象不需要实例化类
    • 为什么使用static?
      • 使用static的优点在于不需要使用全局变量即可保持变量,不泄露内存
      • 也不容易导致全局变量被误用(因为作用域不在全局)
  • final 属性:

    • 一个类被声明为 final 时不能被继承
    • 一个类中的方法被声明为 final,则子类中此方法无法被重写
  • interface :

    • 定义一个接口类, 接口是类的一个模板,其子类必须实现接口中定义的所有方法
    • 注意: 子类没有继承会报错
    • 语法如下:
      • interface 关键字指定接口类
      • implements 关键字指定继承关系
  • abstract :

    • 定义一个抽象类, 作为父类既有自己的方法属性可以被继承(该方法具有方法体),
    • 又能声明抽象类, 继承的子类必须实现这些抽象类否则报错
    • 是一种介于 类 和 接口 的特殊类
  • interface && abstract 的区别:

    • 一个类可以实现多个 interface ,但一个类只能继承一个 abstract class
    • interface 中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体 ) ,实现类必须要实现。而 abstract class 中并非所有的方法都是抽象的,只有那些冠有 abstract 的方法才是抽象的,子类必须实现
    • 接口中的抽象方法只能是 public 的,不能用 private , protected 修饰符修饰。而抽象类中的抽象方法只能是 public / protected 来修饰,但不能用 private
    • 接口中的抽象方法前不用也不能加 abstract 关键字,默认隐式就是抽象方法; 抽象类中抽象方法前则必须加上 abstract 表示显式声明为抽象方法

六.设计模式

  • 单例模式
  • 工厂模式
  • 组合模式
  • 策略模式

七.面向对象的设计原则

  • 单一职责原则(Single-Resposibility Principle)

  • 开放封闭原则(Open-Closed principle)。"软件实体应该是可以扩展的,但是不可修改。

  • Liskov替换原则(Liskov-Substituion Principle)。"子类型必须能够替换掉它们的基类型。

  • 依赖倒置原则(Dependecy-Inversion Principle)。"抽象不应依赖于细节,细节应该依赖于抽象。

  • 接口隔离原则(Interface-Segregation Principle)。"多个专用接口优于一个单一的通用接口。

  • 良性依赖原则。"不会在实际中造成危害的依赖关系,都是良性依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值