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 相关文章推荐
oracle资料库函式库
Oct 09 PHP
ThinkPHP中实例Model方法的区别说明
Aug 21 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
解析获取优酷视频真实下载地址的PHP源代码
Jun 26 PHP
php实现的漂亮分页方法
Apr 17 PHP
PHP获取远程图片并保存到本地的方法
May 12 PHP
使用PHPCMS搭建wap手机网站
Sep 20 PHP
php验证邮箱和ip地址最简单方法汇总
Oct 30 PHP
PHP生成短网址方法汇总
Jul 12 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
php 中的closure用法详解
Jun 12 PHP
PHP 对象接口简单实现方法示例
Apr 13 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
PHP验证码函数代码(简单实用)
2013/09/29 PHP
Destoon模板制作简明教程
2014/06/20 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
javascript 闭包疑问
2010/12/30 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
python获取中文字符串长度的方法
2018/11/14 Python
基于python的Paxos算法实现
2019/07/03 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
python opencv如何实现图片绘制
2020/01/19 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
大学生思想汇报范文
2013/12/31 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
家庭困难证明
2014/10/12 职场文书
2014年设计师工作总结
2014/11/25 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python