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 相关文章推荐
PHP4实际应用经验篇(8)
Oct 09 PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 PHP
php实现word转html的方法
Jan 22 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
php模拟post上传图片实现代码
Jun 24 PHP
php分页查询的简单实现代码
Mar 14 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
yii2.0框架场景的简单使用示例
Jan 25 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 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开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
详解vue高级特性
2020/06/09 Javascript
python定时器(Timer)用法简单实例
2015/06/04 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
Python threading的使用方法解析
2019/08/28 Python
Python笔记之代理模式
2019/11/20 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
某公司的.net工程师面试题笔试题
2013/11/22 面试题
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
中文系学生自荐信范文
2013/11/13 职场文书
餐饮业的创业计划书范文
2013/12/26 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
店长职务说明书
2014/02/04 职场文书
疾病防治方案
2014/05/31 职场文书
大学生就业自荐书
2014/06/16 职场文书
安全演讲稿开场白
2014/08/25 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
python基础学习之递归函数知识总结
2021/05/26 Python
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers