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 相关文章推荐
phpBB BBcode处理的漏洞
Oct 09 PHP
用Apache反向代理设置对外的WWW和文件服务器
Oct 09 PHP
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 PHP
用PHP生成静态HTML速度快类库
Mar 18 PHP
PHP大转盘中奖概率算法实例
Oct 21 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
Jan 04 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
thinkphp5实现微信扫码支付
Dec 23 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
PHP 一个页面执行时间类代码
2010/03/05 PHP
php中in_array函数用法探究
2014/11/25 PHP
为你总结一些php信息函数
2015/10/21 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
python字符串,数值计算
2016/10/05 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
印尼购物网站:iLOTTE
2019/10/16 全球购物
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
应届毕业生求职信范文分享
2013/12/26 职场文书
生物学学生自我评价
2014/01/17 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
大学推普周活动总结
2015/05/07 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers