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 代码优化的42条建议 推荐
Sep 25 PHP
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
一个PHP并发访问实例代码
Sep 06 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
Mar 11 PHP
Linux下php5.4启动脚本
Aug 03 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
php替换字符串中间字符为省略号的方法
May 04 PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 PHP
不常用但很实用的PHP预定义变量分析
Jun 25 PHP
php命令行模式代码实例详解
Feb 26 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代码(星期六,星期日总和)
2009/11/12 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
php中final关键字用法分析
2016/12/07 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
javascript中的array数组使用技巧
2010/01/31 Javascript
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
python人民币小写转大写辅助工具
2018/06/20 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
质检员的岗位职责
2013/11/15 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
聘任合同书
2015/09/21 职场文书
学习经验交流会策划书
2015/11/02 职场文书
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android