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 相关文章推荐
杏林同学录(九)
Oct 09 PHP
第二节--PHP5 的对象模型
Nov 16 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
fgetcvs在linux的问题
Jan 15 PHP
深入php常用函数的使用汇总
Jun 08 PHP
php GUID生成函数和类
Mar 10 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
PHP函数func_num_args用法实例分析
Dec 07 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 PHP
php5与php7的区别点总结
Oct 11 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+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
基于PHP实现简单的随机抽奖小程序
2016/01/05 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
js的回调函数详解
2015/01/05 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python里disconnect UDP套接字的方法
2015/04/23 Python
Django小白教程之Django用户注册与登录
2016/04/22 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
Python中的元组介绍
2019/01/28 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
python try 异常处理(史上最全)
2019/03/07 Python
python线程池如何使用
2020/05/28 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
家长会演讲稿范文
2014/01/10 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
观看建国大业观后感
2015/06/01 职场文书
2016年4月份红领巾广播稿
2015/12/21 职场文书
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技