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 相关文章推荐
PHP游戏编程25个脚本代码
Feb 08 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
php 启动时报错的简单解决方法
Jan 27 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
PHPMailer发送邮件
Dec 28 PHP
PHP实现网站应用微信登录功能详解
Apr 11 PHP
thinkPHP5框架接口写法简单示例
Aug 05 PHP
yii2中关于加密解密的那些事儿
Jun 12 #PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 #PHP
Laravel框架模板继承操作示例
Jun 11 #PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 #PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 #PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 #PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 #PHP
You might like
漂亮但不安全的CTB
2006/10/09 PHP
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
Python实现最大子序和的方法示例
2019/07/05 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
浅谈Python 参数与变量
2020/06/20 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
应届毕业生的自我鉴定
2013/11/13 职场文书
七年级英语教学反思
2014/01/15 职场文书
评职称个人总结
2015/03/05 职场文书
远程教育学习心得体会
2016/01/23 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript
JavaScript实现队列结构过程
2021/12/06 Javascript
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle
JS实现简单九宫格抽奖
2022/06/28 Javascript