php进阶
定义类
class ClassName
{
包含属性和方法
}
class:关键字,说明声明了一个类
ClassName:类名
满足标识符的定义规则
一个php引入另一个php文件的类:require_once "view.php"
对象是通过类实例化出来的,使用new关键字来生成一个对象
语法:
$对象名称 = new 类名称();
如果定义了一个person之后,创建该类的对象
$p1 = new person();
$p2 = = new person();
在类的外部,访问对象中的成员,可通过“对象->成员”的形式
在类的内部,访问访问类的成员(属性或方法),使用“$this->成员”代表本对象的引用.
如:
Function name(){
$this->name;
$this->say();
}
构造方法
在类的外部,访问对象中的成员,可通过“对象->成员”的形式
在类的内部,访问访问类的成员(属性或方法),使用“$this->成员”代表本对象的引用.
如:
Function name(){
$this->name;
$this->say();
}
封装
封装是面向对象三大特征之一,含义有两层:
--把对象的属性和方法结合到一起
--尽可能隐藏对象的内部细节,对外只保留 有效的接口
反应在设计上就是,封装可以保证度对象以外的部分不能随意读写对象的内部数据
PHP中的封装涉及到三个关键字public、protected,private
类成员的可见性
为控制类成员的可见性,限定对属性和方法的访问,使用以下三种访问修饰符:
--public表示全局,类内部外部子类都可访问
--protected表示受保护的,只有本类或子类或父类可以访问
--private表示私有的,只有本来内部可以使用
注意:只要属性前有修饰符,要把var去掉,var等同于public的访问权限
继承
PHP中只支持单重继承
通过继承生成的子类,将自动拥有父类的有关属性和方法(父类中的私有成员除外)
子类还可以定义自己的新属性和相应的新方法
必要时,子类可重新声明父类的同名属性或重新定义父类的同名方法
继承使用extends关键字
class B extends A{
}
子类覆盖父类中同名的方法时,在子类里可以使用如下两个方法调用父类的方法
-- 一种是使用父类的“类名::”来调用父类 中被覆盖的方法;
-- 一种是使用 “parent::”的方式来调用父 类中被覆盖的方法;
访问修饰符protected
Protected的成员不能被类的外部代码访问。但是该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其子类都不具有访问其属性和方法的权限
Final关键字
Final可以修饰类和方法
被final修饰的类不能被继承
被final修饰的方法不能被覆盖
Static关键字
Static修饰的属性是静态属性,静态属性是属于类的,不属于任何对象实例,这样的属性在内存中只有一个,多个对象公用这一个属性
静态属性不可以由对象通过->操作符访问
静态属性由类名::$静态属性来访问
如:
class parentq{
public static $name="ishishen";
function shen(){
echo "alading".PHP_EOL;
}
}
echo parentq::$name;
Static修饰的方法成为静态方法,静态方法只能使用静态成员,不能访问非静态成员
静态方法中访问静态属性不能用$this,而是使用self::$静态属性或类名::静态属性
非静态方法中访问静态属性也是使用self::$静态属性或类名::静态属性
类外访问静态方法可以使用类名::静态方法直接调用,也可以使用对象之间调用
)
Const关键字
PHP中定义常量用define()函数,但在类里使用const定义常量,常量的值不能被修改
在类外使用时使用类名::常量名(没有$),方法内使用时使用self::常量名
如:
class fruit{
public $weidao="meiwei";
const colors="huang";
const neme="apple";
function shuchu(){
echo self::colors;
}
}
$w=new fruit;
echo $w::neme;
__call方法处理调用错误
使用对象调用方法时,如果方法不存在,运行时程序就会退出不能继续执行
如果定义了__call()方法,在试图使用对象调用不存在的方法时,就会提示调用的方法和使用的参数不存在,但程序扔可以继续执行
该方法声明是包含两个参数,第一个参数string型,是调用不存在方法时的方法名,第二个是array型,是调用的不存在的方法的参数
class persona{
public $name1;
public $sex;
public function __call($name, $arguments)
{
echo '调用不存在的动态方法名',$name,'<br>';
echo '以下是通过——call方法显示的参数','<br>';
}
function day(){
var_dump(11);
}
}
$person=new persona();
$person->name1();
$person->day();
autoload()函数
调用一个类的时候,必须要先将该类所在的文件引入(include“xxx.php”),如果我们在一个页面里调用的类很多,那不得不使用许多include“xxx.php”,显的很麻烦
遇到以上情况,只要定义autoload()函数帮我们解决问题
该函数不是类方法,是独立的方法,有一个string类型的参数是声明不存在类的类名,如:
function __autoload($className) {
Include $className.”.php”;
}
抽象方法和抽象类
在类中没有方法体的方法叫抽象方法,即方法名后面没有大括号和具体内容,方法名后面直接是分号,抽象方法使用abstract来修饰
--如:abstract function person();
如果类中有抽象方法,那么该类就要被abstract修饰,该类成为抽象类
抽象类必须有抽象方法,但也可以有成员属性和非抽象方法
抽象类是一种规范,要求子类去遵守,子类继承抽象类后,安装子类的需求将抽象类中的抽象方法实现
抽象方法和抽象类
在类中没有方法体的方法叫抽象方法,即方法名后面没有大括号和具体内容,方法名后面直接是分号,抽象方法使用abstract来修饰
--如:abstract function person();
如果类中有抽象方法,那么该类就要被abstract修饰,该类成为抽象类
抽象类必须有抽象方法,但也可以有成员属性和非抽象方法
抽象类是一种规范,要求子类去遵守,子类继承抽象类后,安装子类的需求将抽象类中的抽象方法实现
抽象方法是作为子类重载的模板来使用,子类继承抽象类时必须将其中的抽象方法全部实现,否则子类仍然不能被实例话
abstract class mode{
var $test;
abstract function fun1();
abstract function fun2();
function fun(){
}
}
class test extends mode{
function fun1(){}
function fun2(){}
}
$test=new test();
接口

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!