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 无限级 SelectTree 类
May 19 PHP
PHP 图片上传代码
Sep 13 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
php实现复制移动文件的方法
Jul 29 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 PHP
php文件管理基本功能简单操作
Jan 16 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
php时间戳转换代码详解
Aug 04 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
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
javascript中的new使用
2010/03/20 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
微信小程序收藏功能的实现代码
2018/06/12 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
javascript局部自定义鼠标右键菜单
2020/12/08 Javascript
python检索特定内容的文本文件实例
2018/06/05 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
探矿工程师自荐信
2014/01/24 职场文书
楼面部长岗位职责范本
2014/02/14 职场文书
小学科学教学计划
2015/01/21 职场文书
车间质检员岗位职责
2015/04/08 职场文书
小学语文国培研修日志
2015/11/13 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
python 标准库原理与用法详解之os.path篇
2021/10/24 Python