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;
    子类继续抽象类时,必须实现抽象类中的所有抽象方法,负责子类也必须声明为抽象类;
    子类实现接口时,必须实现接口中的所有方法;
相关推荐
Lee川5 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川8 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i10 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有10 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有10 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫11 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫11 小时前
Handler基本概念
面试
Wect12 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼13 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼13 小时前
Next.js 企业级落地
前端·javascript·面试