PHP 方法重载|学习笔记

简介: 快速学习 PHP 方法重载

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第二阶段:PHP 方法重载】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/712/detail/12713


PHP 方法重载

内容介绍:

一、目标

二、概念

三、示例

一、小结


一、目标

理解方法重载的原理,利用这些原理解决容错性的问题,掌握方法重载的实现


二、概念

PHP 方法重载:对象或者类访问不存在或者权限不够的方法时,自动触发的魔术方法让代码不出错(容错处理)

1.方法重载魔术方法

__call (方法名,方法参数列表):调用不存在或者权限不够的方法时触发

__callStatic (方法名;方法参数列表):调用不存在或者权限不够的静态方法时触发


三、示例

1.方法重载

class Man{

private function show(){

echo _METHOD__, '
';

}

private static function staticshow({

echo __METHOD__,'
';

}

#普通方法重载

public function __call ($name,$args){

echo $name,_METHOD__,'
';

}

#静态方法重载

public static function __callstatic($name,$args){

echo $name,__METHOD__,'br/> ';

}

}

#访问不可访问的方法

Man: :staticshow();

$m = new Man();

$m->show();

Man 类里有两个私有方法 showstaticshow,这两个方法是不能在外面访问的,但是增加 __call 之后会触发这个方法。

#PHP 重载:方法重载

cLass Man{

private function show(){

echo __METHOD__,'
';

}

private static function staticShow(){

echo __METHOD__,'
';

}

}

这里面会有这两个方法,不管用哪种方法都是访问不了的,因为这是私有方法。

图片1.png

此时如果加入方法重载,就不会报错。

class Man{

private function show(){

echo __METHOD__ ,'
';

}

#普通方法重载

public function __call($name , $args){

echo $name,__METHOD__,'
';

}

private static function staticShow(){

echo __METHOD__ , '
';

}

}

#Man: :staticshow();

$m = new Man();

$m->show();

再调用一次,传入四个的参数1,2,3,4,然后打印一个结果

var_dump($args);

图片2.png

运行将所有的参数放入了一个数组

图片3.png

但是这种方法不会触发静态,静态还是报错,因此静态也需要一个同样的内容。添加静态方法重载后同样不报错。

#静态方法重载

public static function __callstatic($name,$args){

echo $name,__METHOD__,'br/> ';

}

2. }

3. 方法重载的主要目的

不让外部访问出错。当然,如果必要时也可以进行内部访问

class Man{

private function show(){

echo _METHOD__, '
';

}

private static function staticshow(){

echo _METHOD__,'
';

}

#方法重载

public function __call ($name , $args){

#允许访问列表

$allow = array( ' show ' );

#判定是否在列表中

if(in_array(Sname,$allow)) return $this->$name(implode($args,' , '));

#其他情况

return false;

}

public static function _callstatic($name , $args){

#不允许访问

return false;

}

如果有一个 show 方法是允许访问的,如果判定在列表中,就去内部调用这个方法,$this->$name 意味着调用了方法的名字,加括号系统会理解为这是一个函数,就会去运行,运行去找 show 方法,show 方法里把参数传进去,参数是外部传进来然后用逗号分隔组成字符串,放到里面就相当于一个参数列表。

#允许访问列表

$allow = array( ' show ' );

#判定是否在列表中

if(in_array(Sname,$allow)) return $this->$name(implode($args,' , '));

#其他情况

return false;

图片4.png 

Show 之前拿到的结果是只调用了方法,并没有拿到任何结果,但是现在 man::show 这两个方法都真正的 show 方法被调用,之前调用的只是魔术方法。现在实现了两次调用,并没有触发 staticshow,因为里面没有实现。

图片5.png

同样的不单单做了容错处理,还做了内部控制,可以做到精确化控制有些允许访问有些不允许访问,甚至内部应该怎么访问。


四、小结

1、PHP 方法重载是用来控制外部对类中方法的错误访问而设定的一种容错处理

PHP 方法重载的本质是实现一种错误的优雅处理,出错了之后在内部输出错误。整个 PHP 的重载都是一种容错以及内部处理的方式。

相关文章
|
2月前
|
存储 Java 数据库连接
php学习笔记-代码基本语法-day01
本文是关于PHP编程语言的基础语法学习笔记,内容包括PHP的介绍、注释风格、数据类型、命名规范、常量和变量的使用,以及变量和常量相关的常用函数。文中详细解释了PHP的基本语法元素和一些易混淆的概念,如传值赋值与传址赋值、可变变量,以及如何检查变量是否已定义或为空。
php学习笔记-代码基本语法-day01
|
2月前
|
JavaScript 前端开发 安全
php学习笔记-普通表单参数提交获取及页面的重定向和一个登录小demo-day05
本文介绍了PHP中普通表单参数的提交获取、页面重定向的方法,并通过一个登录示例演示了表单参数的封装和页面跳转处理。
|
2月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
2月前
|
存储 API PHP
php学习笔记-php数组的创建和使用,数组常用函数-day03
关于PHP数组的创建、使用以及常用函数的详细学习笔记。
php学习笔记-php数组的创建和使用,数组常用函数-day03
|
2月前
|
JavaScript Java PHP
php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02
本文是第二天的PHP学习笔记,涵盖了PHP中运算符的使用、类型转换方式,以及打印输出语句的特点,展示了其相较于其他编程语言的一些特殊之处。
php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02
|
2月前
|
SQL 关系型数据库 MySQL
php学习笔记-连接操作mysq数据库(基础)-day08
本文介绍了PHP中连接操作MySQL数据库的常用函数,包括连接服务器、设置字符集、关闭连接、选择数据库、结果集释放、获取影响行数以及遍历结果集等操作。通过书籍查询的实例演示了如何使用这些函数进行数据库操作,并提供了一个PHP操纵MySQL数据库的模板。
php学习笔记-连接操作mysq数据库(基础)-day08
|
2月前
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
2月前
|
JavaScript 程序员 PHP
php学习笔记-php自定义函数-day05
本文介绍了PHP自定义函数的创建、调用、参数赋值以及作用域和生命周期,还探讨了`global`和`static`关键字的使用,以及`return`、`exit`和`die`的不同用法。
|
2月前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
安全 关系型数据库 MySQL
某教程学习笔记(一):17、php漏洞
某教程学习笔记(一):17、php漏洞
96 0
某教程学习笔记(一):17、php漏洞