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;
    子类继续抽象类时,必须实现抽象类中的所有抽象方法,负责子类也必须声明为抽象类;
    子类实现接口时,必须实现接口中的所有方法;
相关推荐
@卞36 分钟前
C语言常见概念
c语言·开发语言
Swift社区40 分钟前
LeetCode 421 - 数组中两个数的最大异或值
算法·leetcode·职场和发展
wjs20241 小时前
Eclipse 关闭项目详解
开发语言
沐知全栈开发1 小时前
《隐藏(Hide)》
开发语言
lkbhua莱克瓦241 小时前
Java基础——方法
java·开发语言·笔记·github·学习方法
catchadmin1 小时前
PHP 依赖管理器 Composer 2.9 发布
开发语言·php·composer
悠悠~飘1 小时前
PHP基础-字符串(第16天)
php
范纹杉想快点毕业2 小时前
《嵌入式开发硬核指南:91问一次讲透底层到架构》
java·开发语言·数据库·单片机·嵌入式硬件·mongodb
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于Python的Bilibili平台数据分析与可视化实现为例,包含答辩的问题和答案
开发语言·python·数据分析
芝麻馅汤圆儿2 小时前
c文件编译
c语言·开发语言