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 用sock技术发送邮件的函数
Jul 21 PHP
php session 检测和注销
Mar 16 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
Jan 24 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
Apr 24 PHP
CI框架开发新浪微博登录接口源码完整版
May 28 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
php查询mysql数据库并将结果保存到数组的方法
Mar 18 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
php使用event扩展的io复用测试的示例
Oct 20 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的知识
2006/11/17 PHP
PHP简洁函数小结
2011/08/12 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
jquery 指南/入门基础
2007/11/30 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
Python中使用SAX解析xml实例
2014/11/21 Python
python中的代码编码格式转换问题
2015/06/10 Python
python妹子图简单爬虫实例
2015/07/07 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
QA工程师岗位职责
2013/11/20 职场文书
欠款起诉书范文
2015/05/19 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书