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
解决GD中文乱码问题
Feb 14 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
解析php php_openssl.dll的作用
Jul 01 PHP
Codeigniter实现多文件上传并创建多个缩略图
Jun 12 PHP
ThinkPHP Mobile使用方法简明教程
Jun 18 PHP
PHP比你想象的好得多
Nov 27 PHP
php中的登陆login实例代码
Jun 20 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
Oct 23 PHP
PHP implode()函数用法讲解
Mar 08 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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页面中文乱码分析
2013/10/29 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
javascript一些实用技巧小结
2011/03/18 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
vue获取form表单的值示例
2019/10/29 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
建筑设计师岗位职责
2013/11/18 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
四议两公开实施方案
2014/03/28 职场文书
公司领导班子对照材料
2014/08/18 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
撤诉状格式范本
2015/05/19 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers