PHP面向对象

格式

php 复制代码
class Dog {
	public $name = 'tom';
	public function eat() {
	}
}
$cat = new Dog;
echo $cat->name;
$cat->eat();

函数的public可以省略,变量的不能省略

$this

代表自身的对象

访问控制

public:共有的类成员可以在任何地方被访问

protected:受保护的类成员可以被其自身以及其子类和父类访问

private:私有的类成员只能被其定义所在的类访问

构造函数

创建对象时,会被自动调用;

用于初始化对象;

没有返回值

php 复制代码
class A {
	private $name;
	public funciton __construct($name)
	{
		$this->name = $name;
	}
}

析构函数

在对象被销毁时自动调用;

用来执行一些清理操作,如释放资源或关闭数据库连接;

当对象不在被引用或脚本执行结束时,析构函数会被自动调用;

php 复制代码
class ex {
	public function say() {
		echo 'hello';
	}
	public function __destruct() {
	}
}

static静态变量和self

静态:无需对类进行实例化,就可以直接调用这些属性和方法

所有对静态变量进行的操作都会对所有变量起作用;

php 复制代码
public static $dog='dogodogodg';
echo self::$dog;

类常量

所有的对象共用一个属性;

类常量不可以更改,静态属性可以更改

php 复制代码
const dog='dogodogodg';
echo self::dog;

类外也可以正常调用

php 复制代码
echo Dog::dog;

static静态方法

可以调用静态方法、静态变量

php 复制代码
public static function eat() {
	echo self::$name;
}

可以调用非静态方法、非静态变量

php 复制代码
public function eat(){
	echo (new self)->name;
	echo (new self)->eat();

继承

php 复制代码
class b extends a{}
  • final关键字

    防止类被继承

    防止类的方法被重写

    final不能用于属性

  • 调用父类方法

    parent::方法名

    parent::__construct()

  • static静态延迟绑定

    运行时根据实际调用的类来确定静态方法和属性的绑定(动态绑定)

php 复制代码
static::$name

多态

PHP中不允许方法名重复

方法重写是指子类重写父类的的方法,以改变方法的实现细节;

方法重载是只在同一个类中根据参数个数或类型不同来实现不同功能;

-方法重载

php 复制代码
$args = func_get_args();     //获取参数
$numargs = func_num_args();   //获取参数数量

要借助条件判断实现,根据不同的参数或参数数量来重写

接口和抽象类

  • interface
    接口是指一组方法的集合,不是类,不能被实例化;
    可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容;
    只可以使用public;
  • abstract
    抽象类是一种特殊的类,只能被继承,不能被实例化;
    抽象类用于定义一组相关的方法,但这些方法的具体实现由继承它的子类来完成;
    子类继承抽象 类后,必须实现抽象类中所有的抽象方法;
    抽象类可以包含抽象方法和普通方法
    抽象方法是没有具体实现的方法,只有方法的声明,而不需要方法体;
    抽象方法只能存在于抽象类中;
    可以使用prtected,但不能使用private
  • 区别
    抽象类可以包含非抽象方法的实现,而接口只能包含方法的声明,没有方法的实现;
    类只能继承一个抽象类,但可以实现多个接口;
    抽象类可以有构造函数,而接口不能有构造函数;
    抽象类中的方法可以有public、protected和private访问修饰符,而接口中的方法只能说public;
    子类继续抽象类时,必须实现抽象类中的所有抽象方法,负责子类也必须声明为抽象类;
    子类实现接口时,必须实现接口中的所有方法;
相关推荐
xiangyun611 分钟前
【408数据结构 03】线性表与顺序表:C++手写SeqList
开发语言·数据结构·c++
en.en..6 分钟前
TCP/IP四层模型「数据包封装与拆包」| 网络传输
服务器·网络·php
Lsir10110_16 分钟前
从按钮“点不动“讲起——深入理解 Qt 信号槽机制
开发语言·qt·信号处理
君科程序定做18 分钟前
用 IDL 处理高分一号(GF-1 / GF-1B/C/D)数据
c语言·开发语言
敲代码的嘎仔20 分钟前
用 Redis 合并写 + DelayQueue 延迟检测,把视频播放进度写库频率降到 1/60
java·开发语言·数据库·redis·缓存·音视频·高并发
六边形工程师31 分钟前
真实调研2500名程序员:工资差一倍,AI拉开分水岭
面试
不会就选b1 小时前
算法日常・每日刷题--贪心<11>
算法·leetcode·职场和发展
代码中介商1 小时前
C++ 预约系统实战(一):项目总览与 C/S 架构设计
c语言·开发语言·c++
我叫汪枫1 小时前
RAG 进阶:切分、检索、重排序,以及它和 Agent、微调、MCP 都是什么关系
开发语言·python
弘毅 失败的 mian1 小时前
数组和指针基础
c语言·开发语言·经验分享·笔记