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;
    子类继续抽象类时,必须实现抽象类中的所有抽象方法,负责子类也必须声明为抽象类;
    子类实现接口时,必须实现接口中的所有方法;
相关推荐
請你喝杯Java22 分钟前
【工具类】得到多个数组中的相同元素
开发语言·javascript
CodeCraft Studio4 小时前
PPT处理控件Aspose.Slides教程:在 C# 中将 PPTX 转换为 Markdown
开发语言·c#·powerpoint·markdown·ppt·aspose·ai大模型
萧鼎5 小时前
深入理解 Python Scapy 库:网络安全与协议分析的瑞士军刀
开发语言·python·web安全
阿拉丁的梦8 小时前
教程1:用vscode->ptvsd-创建和调试一个UI(python)-转载官方翻译(有修正)
开发语言·python
木宇(记得热爱生活)8 小时前
一键搭建开发环境:制作bash shell脚本
开发语言·bash
Cisyam^8 小时前
Go环境搭建实战:告别Java环境配置的复杂
java·开发语言·golang
Greedy Alg8 小时前
LeetCode 239. 滑动窗口最大值
数据结构·算法·leetcode
IAR Systems9 小时前
在IAR Embedded Workbench for Arm中实现Infineon TRAVEO™ T2G安全调试
开发语言·arm开发·安全·嵌入式软件开发·iar
爱coding的橙子9 小时前
每日算法刷题Day65:8.27:leetcode dfs11道题,用时2h30min
算法·leetcode·深度优先
jayzhang_9 小时前
SPARK入门
大数据·开发语言