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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
php学习 函数 课件
Jun 15 PHP
PHP 编程安全性小结
Jan 08 PHP
php 高性能书写
Dec 11 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
php查看一个变量的占用内存的实例代码
Mar 29 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 heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
php防止sql注入简单分析
2015/03/18 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
php简单中奖算法(实例)
2017/08/15 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
将python安装信息加入注册表的示例
2019/11/20 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
python中time、datetime模块的使用
2020/12/14 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
银行演讲稿范文
2014/01/03 职场文书
总经理助理职责
2014/02/04 职场文书
文明倡议书
2015/01/19 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis