php 可变函数使用小结


Posted in PHP onJune 12, 2018

可变函数

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

变量函数不能用于语言结构,例如 echo(),print(),unset(),isset(),empty(),include(),require() 以及类似的语句。需要使用自己的包装函数来将这些结构用作变量函数。

先将我的伪代码写上。

protected $model;
 public function __construct(Category $category)
 {
  $this->model = $category;
 }
 public function getLists($request, $isPage = 'get', $order = 'created_at', $sort = 'desc')
 {
  return $this->model->orderBy($order, $sort)->$isPage();
 }

在 getLists 中,有一个 $isPage 的参数。本意是传入 get 就是获取全部数据,paginate 就是分页。写完以后觉得哪里不对。在我们平常的写法中,查找全部数据 $this->model->orderBy($order, $sort)->get(); 是这样的,我也未见过使用变量来替换 get() 的。在实际运行中,程序正常执行。随后在论坛中询问这种写法。接下来就要引入一个概念,《可变函数》。

什么是可变函数?

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。

了解了这个概念以后那么上述程序就可以讲的通了。$isPage 在程序运行中,替换为 get, 而 $isPage 后有一个圆括号,那么程序就会寻找同名函数。进而继续执行。

示例:

<?php
function foo() {
 echo "In foo()<br />\n";
}
function bar($arg = '') {
 echo "In bar(); argument was '$arg'.<br />\n";
}
$func = 'foo';
$func();  // 执行 foo(); 命令行中输出:In foo()<br />
$func = 'bar';
$func('test'); // 执行 bar();命令行中输出:In bar(); argument was 'test'.<br />

可变函数的语法来调用一个对象的方法。

<?phpclass Foo
{
 function Variable()
 {
  $name = 'Bar';
  $this->$name(); // This calls the Bar() method
 }
 function Bar()
 {
  echo "This is Bar";
 }
}
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname(); // This calls $foo->Variable()
// 命令行执行输出: This is Bar

当调用静态方法时,函数调用要比静态属性优先。Variable 方法和静态属性示例。

<?php
class Foo
{
 static $variable = 'static property';
 static function Variable()
 {
  echo 'Method Variable called';
 }
}
echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.
$variable = "Variable";
Foo::$variable(); // This calls $foo->Variable() reading $variable in this scope.

总结

以上所述是小编给大家介绍的php 可变函数使用小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
phpmyadmin 常用选项设置详解版
Mar 07 PHP
php mail to 配置详解
Jan 16 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
PHP图像识别技术原理与实现
Oct 27 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
PHP中define() 与 const定义常量的区别详解
Jun 25 PHP
laravel邮件发送的实现代码示例
Jan 31 PHP
PHP与Web页面的交互示例详解二
Aug 04 PHP
PHP程序员学习使用Swoole的理由
Jun 24 #PHP
PHP实现的装箱算法示例
Jun 23 #PHP
PHP基于curl模拟post提交json数据示例
Jun 22 #PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 #PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 #PHP
PHP实现正则匹配所有括号中的内容
Jun 22 #PHP
PHP实现 APP端微信支付功能
Jun 22 #PHP
You might like
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
Convert Seconds To Hours
2007/06/16 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
python连接池实现示例程序
2013/11/26 Python
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
python去除扩展名的实例讲解
2018/04/23 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
Django框架表单操作实例分析
2019/11/04 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
软件项目开发计划书
2014/05/01 职场文书
副总经理任命书
2014/06/05 职场文书
工伤事故证明
2014/10/20 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
一文简单了解MySQL前缀索引
2022/04/03 MySQL