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 和 MYSQL
Oct 09 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
php防止SQL注入详解及防范
Nov 12 PHP
php表单敏感字符过滤类
Dec 08 PHP
php格式化json函数示例代码
May 12 PHP
功能强大的PHP POST提交数据类
Jul 15 PHP
php版微信自定义回复功能示例
Dec 05 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
php中序列化与反序列化详解
Feb 13 PHP
PHP实现网站应用微信登录功能详解
Apr 11 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 PHP
PHP程序员学习使用Swoole的理由
Jun 24 #PHP
PHP实现的装箱算法示例
Jun 23 #PHP
PHP基于curl模拟post提交json数据示例
Jun 22 #PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 #PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 #PHP
PHP实现正则匹配所有括号中的内容
Jun 22 #PHP
PHP实现 APP端微信支付功能
Jun 22 #PHP
You might like
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
深入解析php中的foreach问题
2013/06/30 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
2016/06/24 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python中requests和https使用简单示例
2018/01/18 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
python cs架构实现简单文件传输
2020/03/20 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
python实现海螺图片的方法示例
2019/05/12 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
python字符串的index和find的区别详解
2020/06/20 Python
python爬虫要用到的库总结
2020/07/28 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
类和结构的区别
2012/08/15 面试题
银行见习期自我鉴定
2014/01/29 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
2014年师德承诺书
2014/05/23 职场文书
运动员代表致辞
2015/07/29 职场文书
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android