PHP学习日记 函数
可变函数
PHP支持可变函数的概念。所以如果一个变量后面有圆括号“()”,PHP将寻找与变量值同名的函数,并尝试执行此函数,可变函数可以用来实现回调函数、函数列表等。可变函数不能用于echo、print、unset、isset、array等等类似的语言结构,需要使用自己的包装函数来将这些结构作为可变函数。可变函数还可以用于对象方法的调用。
<?php function foo(){ echo "foo\n"; } function bar(){ echo "bar\n"; } $func="foo"; $func(); $func="bar"; $func(); $func="echo"; $func("echo"); ?>
PHP5.4起,如果数组中为合法调用,则可以做为可变函数,用于调用类中方法时使用,数组长度必须为2,第一个值为类名或其他合法形式,第二值为要调用的方法名。PHP7.0起支持ClassName::methodName为可变函数。
<?php class Foo { static function bar() { echo "bar\n"; } function baz() { echo "baz\n"; } } $func = array("Foo","bar"); $func(); // prints "bar" $func = array(new Foo, "baz"); $func(); // prints "baz" $func = "Foo::bar"; $func(); // prints "bar" as of PHP 7.0.0; prior, it raised a fatal error ?>
内置函数
PHP超全局变量PHP 有很多标准的函数和结构。还有一些函数需要和特定地 PHP 扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。有很多核心函数已包含在每个版本的 PHP 中如字符串和变量函数。调用 phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加载了那些扩展库。同时还应该注意,很多扩展库默认就是有效的。
匿名函数
匿名函数PHP5.3新增,也叫闭包函数,是一个临时创建的没有指定名称的函数,经常用做回调函数参数的值。匿名函数是通过闭包类Closure来实现的。PHP会自动把匿名函数转换为Closure对象的实例。把一个Closure对象赋值给一个变量与普通的变量赋值是一样的。通过使用use语言结构可以匿名函数可以从父作用域继承变量。继承变量有两种方式,一种是继承变量的值,一种是变量的引用。此外,匿名函数还可以接受普通的参数。匿名函数的父作用域是定义该匿名函数的函数。
<?php $message = 'hello'; // 没有 "use" $example = function () { var_dump($message); }; //值为null $example(); // 使用"use" 继承 $message $example = function () use ($message) { var_dump($message); }; //值为hello $example(); $message = 'world'; //值传递,继承变量的值在方法定义时被确定,所以输出为hello $example(); //引用传递 $example = function () use (&$message) { var_dump($message); }; //参数值的修改会传递到匿名函数内,所以输出为World $message = 'World'; $example(); // $example = function ($arg) use (&$message) { var_dump($arg.$message); }; $example("hello"); ?> PHP5.4起,$this可在匿名函数中使用。 <?php class Test { public function testing() { return function() { var_dump($this); }; } } $object = new Test; $function = $object->testing(); $function(); ?>
PHP7.1起,匿名函数继承的变量不能是超全局变量、$this以及与函数参数名同名的变量。
静态匿名函数
PHP5.4起,当在类的上下文中声明匿名函数,当前类会自动绑定到匿名函数,使$this变量在函数中可用,如果不想自动绑定当前类,就需要声明为静态匿名函数。
<?php class Foo{ function foo(){ $func=static function(){ var_dump($this); }; return $func(); } } $foo=new Foo; $foo->$foo();
PHP学习日记 函数的更多相关文章
- python学习日记(函数基础)
修改文件(原理)--回顾 #修改文件(原理) with open('name','r',encoding='utf-8') as f,\ open('password','w+',encoding=' ...
- android学习日记03--常用控件Dialog
常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...
- android学习日记03--常用控件button/imagebutton
常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...
- SQL学习日记
目录 SQL学习日记 1. 常见的数据库对象 2. DDL 定义语句 3. DML 操作语句 4. DQL 查询语句 5. DCL 控制语句 SQL学习日记 1. 常见的数据库对象 对象名 关键字 描 ...
- C++学习日记:关于我决定开始学习C++的那些事
苦恼于Python运行时感人的速度,我决定学习C++. 为了激励我自己好好地学习这门未曾谋面的编程语言,我决定在此开设专栏:C++学习日记.希望在读者们的监督下,我可以早日掌握这门语言.当然,如果那位 ...
- Linux学习日记-使用EF6 Code First(四)
一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是 请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...
- JavaScript学习09 函数本质及Function对象深入探索
JavaScript学习09 函数本质及Function对象深入探索 在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念 ...
- android学习日记05--Activity间的跳转Intent实现
Activity间的跳转 Android中的Activity就是Android应用与用户的接口,所以了解Activity间的跳转还是必要的.在 Android 中,不同的 Activity 实例可能运 ...
- android学习日记03--常用控件checkbox/radiobutton
常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...
随机推荐
- IIS错误整理收集【持续更新】
一.HTTP 错误 403.14 - Forbidden HTTP 错误 403.14 - Forbidden,Web 服务器被配置为不列出此目录的内容. 解决方案:修改程序池.NET Framewo ...
- 拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno
拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno 转载须注明出处:htt ...
- 20155223 2016-2017-2 《Java程序设计》第7周学习总结
20155223 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 Lambdo表达式下,任何参数的类型必须标明清楚:如果有目标类型的话,在编译程序可 ...
- 27、增强for循环
增强for循环 使用增强for循环可以简化数组和Collection集合的遍历,格式: for(元素数据类型 变量 : 数组或者Collection集合) { 使用变量即可,该变量就是元素 } 例: ...
- Ubuntu 问题汇总
1..bashrc环境变量失效,ls.cp等命令不能使用了: export PATH=/usr/bin:/bin 2.添加环境变量 echo '********' >> ~/.bashrc ...
- boost 时间
利用boost来获取当前时间又方便快捷,还不用考虑跨平台的问题. 1. 输出YYYYMMDD [cpp] view plaincopy #include <boost/date_time/gre ...
- VUE常用指令总结!
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- transparent 透明效果
background-color:transparent;就是把背景色设置为透明. 实际上background默认的颜色就是透明的属性.所以写和不写都是一样的 span{ width: 0; heig ...
- web项目打包后在代码中获取资源文件
在web项目里面,有时代码里面需要引用一些自定义的配置文件,这些配置文件如果放在类路径下,项目经过打包后使用的相对路径也会发生变化,所以以下给出了三种解决方案. 一.properties下配置 在类路 ...
- linux强制踢掉登录用户【转】
[root@Wang ~]# w :: up :, users, load average: 0.71, 0.58, 0.57 USER TTY FROM LOGIN@ IDLE JCPU PCPU ...