PHP重载
重写,子类重写父类方法。
<?php
/**
* Created by PhpStorm.
* User: SillyCat
* Date: 2024/2/24
* Time: 20:00
*/
/**
* php 重写
*/
class A
{
public function test($a)
{
echo "test1";
}
}
class childA extends A
{
public function test($a)
{
echo "test2";
}
}
$obj= new childA();
$obj->test(1);
重载,相同方法名但参数数量或者类型不同。
PHP中不支持同名方法,而且也不区分数据类型,所有PHP不支持传统重载
PHP中的重载:当某些不允许操作发生时,会自动调用的一种内部机制来实现
属性重载:属性不存在或者权限不够访问的时候自动触发
方法重载:方法不存在或者权限不够访问的时候自动触发
1.属性重载
主要使用以下四种魔术方法实现属性重载:
取值:
当对一个对象不存在(未定义或不可见)的属性进行“取值”时,就会自动调用方法:__GET()
方法不区分大小写。
赋值:
当对一个对象不存在(未定义或不可见)的属性进行“赋值”时,就会自动调用方法:__SET()
判断(isset):
当对一个对象不存在(未定义或不可见)的属性进行isset()判断时,就会自动调用方法:isset()
销毁(unset):
当对一个对象不存在的(未定义或不可见)属性进行unset()判断时,就会自动调用方法:unset()
以上4个方法,被称为魔术方法。
演示:
<?php
/**
* Created by PhpStorm.
* User: SillyCat
* Date: 2024/2/24
* Time: 20:10
*/
class UserInfo
{
public $name;
private $salary = 999;
protected $password;
// 构造函数
public function __construct($name, $password)
{
// 初始化属性
// 构造函数中可以访问类中私有和受保护的成员
$this->name = $name;
$this->password = $password;
}
// 属性重载方法:由系统调用
// 1. __get(): 重载了用户对属性的访问,即读操作
public function __get($name)
{
return ($this->name === 'admin') ? $this->name : 'no admin';
}
// 2. __set($name, $value): 写操作
public function __set($name, $value)
{
if ($name === 'salary') {
if ($this->name === 'admin') {
$this->salary = $value;
echo "工资更新成功!<br>";
} else {
echo '工资更新需要权限!<br>';
}
}
return $this->name = $value;
}
// 3. __isset($name):判断是否有值
public function __isset(string $name){
return isset($this->$name);
}
////4. __unset($name):释放资源
public function __unset(string $name){
unset($this->$name);
}
}
$obj= new UserInfo('admin', '123456');
// 读操作
echo $obj->salary.'<hr>';
// 写操作
$obj->salary = 10000;
echo $obj->salary.'<hr>';
// 判断是否有值
echo isset($obj->salary).'<hr>';
// 释放资源(变量)
unset($obj->salary);
echo isset($obj->salary).'<hr>';
2.方法重载
以魔术方法__call()、__callStatic()分别实现对普通方法和静态方法的重载
演示:
<?php
/**
* Created by PhpStorm.
* User: SillyCat
* Date: 2024/2/24
* Time: 20:29
*/
class TestDemo
{
// __call(): 访问一个不存在或无权限访问的方法的时候会自动调用
public function __call($name, $args){
return '方法是: ' . $name . '<br>参数列表: <pre>' . print_r($args, true);
}
// __callStatic(): 访问一个不存在或无权限访问的静态方法的时候会自动调用
public static function __callStatic($name, $args){
return '静态方法是: ' . $name . '<br>参数列表: <pre>' . print_r($args, true);
}
}
3.回调执行
实现方法
call_user_func()
call_user_func_array()
作用:
- 实现对函数和类方法(包括普通和静态方法)的回调
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)