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学习之数组的定义和填充
Apr 17 PHP
php 定义404页面的实现代码
Nov 19 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
php中eval函数的危害与正确禁用方法
Jun 30 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
Zend Framework教程之视图组件Zend_View用法详解
Mar 05 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
PHP获取二叉树镜像的方法
Jan 17 PHP
smarty模板的使用方法实例分析
Sep 18 PHP
php中yar框架实例用法讲解
Dec 27 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创建多级目录代码
2008/06/05 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
php 数据结构之链表队列
2017/10/17 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
使用python遍历指定城市的一周气温
2017/03/31 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
VC++笔试题
2014/10/13 面试题
教师职称自我鉴定
2014/02/12 职场文书
人力资源管理专业毕业生自荐书
2014/05/25 职场文书
任命书范本大全
2014/06/06 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
歼十出击观后感
2015/06/11 职场文书
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers
 python中的元类metaclass详情
2022/05/30 Python