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版
Oct 09 PHP
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 PHP
PHP中数组的三种排序方法分享
May 07 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
yii添删改查实例
Nov 16 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 PHP
thinkPHP线上自动加载异常与修复方法实例分析
Dec 01 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
PHP操作文件方法问答
2007/03/16 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
python+pygame实现坦克大战
2019/09/10 Python
如何理解python中数字列表
2020/05/29 Python
python pymysql库的常用操作
2020/10/16 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
工程师自我评价怎么写
2013/09/19 职场文书
职业教育毕业生求职信
2013/11/09 职场文书
暑期实习鉴定
2013/12/16 职场文书
自我评价格式
2014/01/06 职场文书
预备党员转正思想汇报
2014/01/12 职场文书
环境科学专业求职信
2014/08/04 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript