好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>CMS系统>Dedecms
<tfoot draggable='sEl'></tfoot>

php闭包作用 py闭包

很多站长朋友们都不太清楚php闭包作用,今天小编就来给大家整理php闭包作用,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 PHP回调函数及匿名函数概念与用法详解 2、 php是什么? 3、 PHP的几种函数参数类型及一些特殊函数 4、 什么是闭包 5、 php如何序列化/存储闭包(Closure) PHP回调函数及匿名函数概念与用法详解

PHP的回调函数其实和C,Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数;

回调函数执行完毕之后,再回到主线程处理接下来的流程;

而在PHP调用回调函数,不像C以及Java那样直接使用函数名作为函数参数,而是在PHP中使用函数对应的字符串名称执行。

// call_user_func — 把第一个参数作为回调函数调用

// 第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

// PHP中的匿名函数,也叫闭包函数,允许指定一个没有名称的函数。最常用的就是回调函数的参数值。

//检测一个函数变量是否是一个闭包

// 传入参数,引用局部变量

php是什么?

PHP(PHP:Hypertext Prerocessor)是一种在电脑上执行的脚本语言,主要是用途在于处理动态网页,也包含了命令行执行接口(command line interface),或者产生图形使用者接口(GUI)程序。[1]

PHP 最早由 Rasmus Lerdorf 在1995年发明,现在PHP实质上的标准由PHP Group和开放源代码社群维护。PHP 以 PHP License 作为许可协议,不过因为这个协议限制了PHP名称的使用,所以和开放源代码许可协议GPL不相容。[2]

PHP 目前被广泛的应用,特别是在服务器端的网页程序开发。一般来说 PHP 大多执行在网页服务器上,透过执行PHP程序码来产生使用者浏览的网页。PHP 几乎可以在任何的操作系统上执行,而且使用 PHP 完全是免费的。根据2007年4月的统计资料,PHP 已经被安装在超过2000万个网站和100万台服务器上[3]。

目录 [隐藏]

1 开发历史

1.1 版本历程

2 应用

3 语法

3.1 类型

3.2 变量

3.3 面向对象

4 PHP相关资源

4.1 函数库

4.2 源代码编码和加速

4.3 样板引擎

5 未来发展

5.1 PHP 5.3

6 参考资料

7 外部链接

[编辑] 开发历史

PHP 的发明人 Rasmus Lerdorf

Zend Technologies的创办人之一 - Andi GutmansFile:Zeev Suraski.jpg

Zend Technologies的创办人之一 - Zeev SuraskiPHP 原本的简称为 Personal Home Page[4],是Rasmus Lerdorf 为了要维护个人网页,而用c语言开发的一些CGI工具程序集,来取代原先使用的 Perl 程序。最初这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量[5]。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。Rasmus Lerdorf 在1995年6月8日将 PHP/FI 公开释出,希望可以透过社群来加速程序开发与寻找错误[6]。这个释出的版本命名为 PHP 2,已经有今日 PHP 的一些雏型,像是类似 Perl 的变量命名方式、表单处理功能、以及嵌入到 HTML 中执行的能力。程序语法上也类似 Perl,有较多的限制,不过更简单、更有弹性。[5]

在1997年,任职于 Technion IIT 公司的两个以色列程序设计师:Zeev Suraski 和 Andi Gutmans,重写了 PHP 的剖析器,成为 PHP 3 的基础,而 PHP 也在这个时候改称为PHP: Hypertext Preprocessor.[5]。经过几个月测试,开发团队在1997年11月释出了 PHP/FI 2,随后就开始 PHP 3 的开放测试,最后在1998年6月正式释出 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 释出后开始改写 PHP 的核心,这个在1999年释出的剖析器称为 Zend Engine[7],他们也在以色列的 Ramat Gan 成立了 Zend Technologies 来管理 PHP 的开发。[5]

在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式释出,2004年7月13日则释出了PHP 5,PHP 5则使用了第二代的Zend Engine[5]。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强[8]。目前PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。[9][10]

2008年PHP 5成为了PHP唯一的有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化[11][12] 。PHP 6 的开发也正在进行中,主要的改进有移除register_globals[13]、magic quotes 和 Safe mode的功能。[9][14]

[编辑] 版本历程

代表意义

红色 旧版;官方停止支持

黄色 旧版;官方维护中

绿色 目前版本

蓝色 未来版本

主要版本 次要版本 释出日期 说明

1.0 1.0.0 1995年6月8日 正式名称为"Personal Home Page Tools (PHP Tools)",第一次使用了"PHP"的名字。[5]

2.0 2.0.0 1994年4月16日 针对PHP 1.0的改进版,速度更快、体积更小,更容易产生动态网页。[5]

3.0 3.0.0 1998年6月6日 开发方式改成多人共同参与。Zeev Suraski 和 Andi Gutmans 为了这个版本重写了剖析引擎。[5]

4.0 4.0.0 2000年5月22日 改成以Zend引擎作为剖析器,具有两阶段剖析/标签剖析系统等先进功能。[15]

4.1.0 2001年12月10日 加入"超全域变量"(superglobals)功能,包含了$_GET、$_POST、 $_SESSION等[15]

4.2.0 2002年4月22日 默认取消register_globals功能。从网络接收的资料将不会设定成全域变量,增加程序安全性[15]。

4.3.0 2002年12月27日 加入命令行执行档,称为CLI。[15]

4.4.0 2005年7月11日 Added man pages for phpize and php-config scripts.[15]

4.4.8 2008年1月3日 Several security enhancements and bug fixes. Was to be the end of life release for PHP 4. Security updates only until 2008-08-08, if necessary.[16]

4.4.9 2008年8月7日 More security enhancements and bug fixes. The last release of the PHP 4.4 series.[17][18]

5.0 5.0.0 2004年7月13日 Zend Engine II with a new object model.[19]

5.1.0 2005年11月24日 Performance improvements with introduction of compiler variables in re-engineered PHP Engine.[19]

5.2.0 2006年11月2日 Enabled the filter extension by default.[19]

5.2.8 2008年12月8日[20] emergent bug fix[20]

5.2.9 2009年2月26日[21] 这个版本解决了5.2.*的超过了50多个错误和多个安全问题,增加了稳定性。[21]

5.2.9-2(Windows) 2009年3月10日[22] 这个版本解决了在Windows系统下OpenSSL的安全缺陷,与其绑定的OpenSSL版本升级到0.9.8k。[22]

5.3.0 预计2009年第二季[23] 支持命名空间; 使用XMLReader和XMLWriter增强XML支持; 支持SOAP ,[24] 延迟静态绑定, 跳转标签(有限的 goto), 闭包,Native PHP archives

6.0 6.0.0 ??? 支持Unicode; 移除ereg扩展, 'register_globals', 'magic_quotes' 和 'safe_mode'; Alternative PHP Cache;Removal of mime_magic and rewrite of fileinfo() for better MIME support[25]

[编辑] 应用

PHP 是一个应用范围很广的语言,特别是在网络程序开发方面。一般来说 PHP 大多在服务器端执行,透过执行 PHP 的程序码来产生网页提供浏览器读取,此外也可以用来开发命令行脚本程序和使用者端的GUI应用程序。PHP可以在许多的不同种的服务器、操作系统、平台上执行,也可以和许多数据库系统结合。使用 PHP 不需要任何费用,官方组织 PHP Group 提供了完整的程序源代码,允许使用者修改、编译、扩充来使用。[26]

[编辑] 语法

PHP的语法参考了Perl、C语言,而且可以整合在HTML之中,以下是一个简单的Hello World程序:

<?php

echo 'Hello World!';

?>

PHP剖析引擎只剖析<?php到?>之间的程序码,而不包含在<?php到?>之间的内容则会直接送出,所以可以用以下的方式来将PHP程序码嵌入在HTML之中:

<?php

//-PHP程式码

?>

html内容

<?php

//-PHP程式码

?>

但是在判断语句中的HTML代码并不会被直接送出:

<?php

if (false) {

?>

HTML Code

<?php

}

?>

PHP可以用三种注解的形式:C与C++所使用的“/*...*/”与“//”,和Perl的“#”。

[编辑] 类型

PHP主要有以下四种变量类型:

整数 (integer)

浮点数 (float)

布尔数 (boolean)

字串 (string)

两种复合类型:

阵列 (array)

物件 (object)

两种特殊类型

NULL

资源 (resource)[27]

[编辑] 变量

PHP中,变量以“$”后接变量名称来表示。变量名称区分大小写。有效的变量名称以字母或底线开头,后接任意数目的字母、数字或底线。[28]

[编辑] 面向对象

PHP从PHP 3开始有了基本的面向对象的特性,但直到PHP 5将面向对象部份重新改写之后,PHP的面向对象功能才比较完善。现在PHP可以说是一个有完整面向对象功能的语言。

[编辑] PHP相关资源

[编辑] 函数库

主条目:PHP函数库列表

内建多样化的函数是PHP主要的特点之一,这些开放程序码的函数提供了各种不同的功能,例如档案处理、FTP、字串处理、等等。这些函数的使用方法和C语言相近(例如printf),这也是PHP广为流行的原因之一。

除了内建的函数之外,PHP也提供了很多延伸函数库(extension),像是各种数据库连接函数、资料压缩函数、图形处理等等。有些延伸函数库需要从PECL(PHP Extension Community Library)取得。

[编辑] 源代码编码和加速

PHP源代码是可以直接读取的,即使放到服务器上执行也是一样。虽然让PHP多了弹性,但相对的会造成安全危机和性能下降的问题。

透过PHP编码器,可以保护PHP的源代码不被读取(对商业软件来说特别有需求),也可以提升执行的效能。有许多公司或团体开发PHP的编码器,将PHP程序编译成字节码(byte code),再透过服务器上安装对应的程序来执行PHP脚本。

除了透过编码器加速之外,PHP还可以透过动态的快取机制来提升速度,加速工具有商业版的,例如Zend Platform,也有开放源代码的加速软件如eAccelerator、APC、XCache。

[编辑] 样板引擎

样板引擎让PHP应用程序可以做逻辑和使用接口上的分离,让程序开发更容易进行,目前比较受欢迎的样板引擎是PHP官方开发的Smarty。不过样板引擎有效能上的争议,因为PHP本身就是一个样板引擎,使用样板引擎反而变成“重新发明了轮子”(reinventing the wheel)。样板引擎最主要的好处就是让不懂PHP程序码的人也可以参与使用接口的开发,因为样板引擎的语言远比PHP简单。

[编辑] 未来发展

[编辑] PHP 5.3

命名空间(namespaces)原本预计在PHP 6提供支持,现在可能改至PHP 5.3就支持[29

PHP的几种函数参数类型及一些特殊函数

给你整理如下:

默认参数:在函数声明时给参数赋值,而且此默认参数只能在最后,调用时可不传递任何参数(若只有默认参数的情况下)

可变参数:一个函数可能需要可个可变数目的参数。在php中,提供了三个函数用于检索函数中所传递的参数。func_get_args()返回一个提供提供给函数的所有参数的数组;func_num_args()返回提供给函数的参数数目;func_get_arg()返回一个来自参数的特定参数。具体如下:

$array = func_get_args();

$count = func_num_args();

$value = func_get_arg();

遗漏参数:当调用函数时,可以传递任意个参数给函数。当函数必要的参数没有i被传递时,此参数值是空,并且PHP会为每个遗漏的参数发出警告

可变函数:使用可变变量,可以基于变量的值调用函数

匿名函数:又叫闭包函数,允许临时建立一个没有指定名称的函数,最经常用作回调函数参数的值。需要注意的是,在匿名函数内的变量的用法不同于全局变量,在匿名函数内的变量是一个闭包变量,另外,被调用闭包的作用域不必是相同的。

什么是闭包

闭包就是能够读取其他函数内部变量的函数。

如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

闭包包含自由(未绑定到特定对象)变量,这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。

“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。

在PHP、Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。

集合 S 是闭集当且仅当 Cl(S)=S(这里的cl即closure,闭包)。特别的,空集的闭包是空集,X 的闭包是 X。集合的交集的闭包总是集合的闭包的交集的子集(不一定是真子集)。有限多个集合的并集的闭包和这些集合的闭包的并集相等;

零个集合的并集为空集,所以这个命题包含了前面的空集的闭包的特殊情况。无限多个集合的并集的闭包不一定等于这些集合的闭包的并集,但前者一定是后者的父集。

php如何序列化/存储闭包(Closure)

实在需要序列化,可以用反射(Reflection),并直接操作代码文件获得上下文信息:/*** 创建一个反射:*/$reflection = new ReflectionFunction($closure);/*** 参数可以直接得到了:*/$params = $reflection-getParameters();/*** 获得Closure的函数体和use变量,形如: * function($arg1, $arg2, ...) use ($val1, $val2, ...) { * // 要获得这个部分的代码!* }* 办法很多,你可以直接用正则、字符串查找或者Tokenizer,等等等等。 * 比如可以先从reflection里得到函数的开始行和结束行:*/$startLine = $reflection-getStartLine(); $endLine = $reflection-getEndLine(); // 然后用str*这个,str*那个的函数来清理,细节不写了:

关于php闭包作用的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php闭包作用 py闭包的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did168529
更新时间:2023-04-11   阅读:28次

上一篇: flow.php flowphp?step=checkout

下一篇:php循环电泳函数 php循环变量

相关资讯

最新资料更新

  • 1.dedecms中sql标签调用数据实例分析
  • 2.织梦系统全站伪静态配置过程详解
  • 3.Dedecms实现自动统计当前栏目文档总数的方法
  • 4.织梦dede模板内怎么加入php代码的方法示例
  • 5.dedecms注册中文会员无法打开空间的解决方法
  • 6.dedecms织梦验证码无法正常显示的3种解决办法
  • 7.在自己的php页面中使用dedecms标签的代码示例
  • 8.dedecms织梦系统$GLOBALS定义文件在哪
  • 9.DEDECMS教程:上/下一篇文章标题长度的截取方法
  • 10.dedecms搜索页面不能使用arclist等标签的解决方法
  • 11.dedecms怎么设置当三级栏目为空时不显示同级栏目
  • 12.php导入文件夹图片保存到dedecms的方法
  • 13.dedecms调用当前栏目的子栏目的两种方法分享
  • 14.织梦DedeCMS各种自定义当前位置顺序的方法
  • 15.dedecms友情链接中去掉织梦链投放修改方法
  • 16.织梦dedecms默认作者和默认来源修改方法
  • 17.dedecms出现Please set request_order ini value to inc
  • 18.dedecms织梦远程图片本地化https链接图片无法本地化怎么解决
  • 19.详解解决织梦dede:title字数限制的两种方法
  • 20.dede栏目页面包屑导航最后的分隔符大于号去掉方法

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]