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
php日历[测试通过]
Mar 27 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
php实现的验证码文件类实例
Jun 18 PHP
PHP 7的一些引人注目的新特性简单介绍
Nov 08 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 PHP
yii2中关于加密解密的那些事儿
Jun 12 #PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 #PHP
Laravel框架模板继承操作示例
Jun 11 #PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 #PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 #PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 #PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 #PHP
You might like
来自PHP.NET的入门教程
2006/10/09 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
php微信开发之谷歌测距
2018/06/14 PHP
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
使用AOP改善javascript代码
2015/05/01 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
用JavaScript实现贪吃蛇游戏
2020/10/23 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
Python中字符编码简介、方法及使用建议
2015/01/08 Python
linux下python抓屏实现方法
2015/05/22 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
python操作excel的方法
2018/08/16 Python
使用python制作一个解压缩软件
2019/11/13 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
2013年入党人员的自我鉴定
2013/10/25 职场文书
教师的实习鉴定
2013/12/15 职场文书
早餐连锁店计划书
2014/01/08 职场文书
学生打架检讨书大全
2014/01/23 职场文书
化妆品店促销方案
2014/02/24 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
nginx常用配置conf的示例代码详解
2022/03/21 Servers
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS