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;
    子类继续抽象类时,必须实现抽象类中的所有抽象方法,负责子类也必须声明为抽象类;
    子类实现接口时,必须实现接口中的所有方法;
相关推荐
Pandaconda15 分钟前
【C++ 面试 - 新特性】每日 3 题(六)
开发语言·c++·经验分享·笔记·后端·面试·职场和发展
chanTwo_0019 分钟前
go--知识点
开发语言·后端·golang
悟空丶12319 分钟前
go基础知识归纳总结
开发语言·后端·golang
北南京海30 分钟前
【C++入门(5)】类和对象(初始类、默认成员函数)
开发语言·数据结构·c++
阿拉伯的劳伦斯2921 小时前
LeetCode第一题(梦开始的地方)
数据结构·算法·leetcode
Mr_Xuhhh1 小时前
C语言深度剖析--不定期更新的第六弹
c语言·开发语言·数据结构·算法
No regret.1 小时前
JAVA基础:值传递和址传递
java·开发语言
Yusei_05231 小时前
C++基础知识6 vector
开发语言·c++
黄卷青灯771 小时前
c++ 定义类 介绍
开发语言·c++·定义类
friklogff1 小时前
【Rust光年纪】构建高效气象模型计算系统:Rust语言库推荐与比较
开发语言·后端·rust