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.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
需要注意的几个PHP漏洞小结
Feb 05 PHP
php5.5新数组函数array_column使用
Jul 08 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 PHP
浅析php如何实现爬取数据原理
Sep 27 PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 PHP
PHP http请求超时问题解决方案
Nov 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
短波收音机简介
2021/03/01 无线电
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
Python类属性的延迟计算
2016/10/22 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
python读取hdfs并返回dataframe教程
2020/06/05 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
银行办理业务介绍信
2014/01/18 职场文书
先进个人事迹材料
2014/12/29 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
地心历险记观后感
2015/06/15 职场文书
2015最新民情日记范文
2015/06/26 职场文书