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中支持多种编码的中文字符串截取函数!
Mar 20 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
Jul 03 PHP
php session_start()出错原因分析及解决方法
Oct 28 PHP
php判断是否为json格式的方法
Mar 04 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
使用PHP实现阻止用户上传成人照片或者裸照
Dec 25 PHP
PHP数组操作――获取数组最后一个值的方法
Apr 14 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
Sep 23 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
php实现购物车产品删除功能(2)
Jul 23 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
May 23 PHP
php快速导入大量数据的实例方法
Sep 23 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 默默经典版本
2009/08/04 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
python实现百万答题自动百度搜索答案
2018/01/16 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
python修改文件内容的3种方法详解
2019/11/15 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
工商治理实习生的自我评价分享
2014/02/20 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
本科毕业生求职信
2014/06/15 职场文书
龙猫观后感
2015/06/09 职场文书
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
Mysql忘记密码解决方法
2022/02/12 MySQL
python的html标准库
2022/04/29 Python
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技