目录结构:

contents structure [-]

在这篇文章中,笔者将会讲解如何使用PHP中的函数,PHP是一门弱语言类型,相比较于强语言类型(java、c++,c#等),在函数方面也提供了更大的灵活性。

1.可变参数函数

PHP中可以通过func_get_args函数获得参数数组的信息,或者通过func_get_args获得参数的数目。
func_get_args获得的是目标参数的副本组成的数组。

看如下的案例:

  1. <?php
  2. function foo()
  3. {
  4. $numargs = func_num_args();
  5. echo "参数数量 : $numargs \n";
  6. if ($numargs >= 2) {//获得第二个参数的值
  7. echo "第二个参数是: " . func_get_arg(1) . "\n";
  8. }
  9. $arg_list = func_get_args();
  10. for ($i = 0; $i < $numargs; $i++) {
  11. echo "参数 $i 是: " . $arg_list[$i] . "\n";
  12. }
  13. }
  14.  
  15. foo(1, 2, 3);
  16. ?>

输出:

  1. 参数数量 : 3
  2. 第二个参数是: 2
  3. 参数 0 是: 1
  4. 参数 1 是: 2
  5. 参数 2 是: 3

在PHP5.6及以上版本中,提供了...的语法格式来支持可变参数。

2.变量函数

  1. <?php
  2. function add($a,$b){
  3. return $a + $b;
  4. };
  5. function subs($a,$b){
  6. return $a - $b;
  7. };
  8. $val = "add";//将函数名"add"赋给变量$val, 执行$val()时则调用函数add()
  9. echo $val(1,2)."\n";//
  10. $val = "subs";//将函数名"subs"赋给变量$val, 执行$val()时则调用函数subs()
  11. echo $val(1,2)."\n";//-1
  12. ?>

3.回调函数

  1. <?php
  2. function cal($fun){
  3. for($i = 0;$i < 100 ;$i++){
  4. if( $fun($i) ){
  5. echo $i."\n";
  6. }
  7. }
  8. };
  9. //如果是回文数就返回true,否则false
  10. function val($num){
  11. if($num == strrev($num))
  12. return true;
  13. return false;
  14. }
  15. cal("val");
  16. ?>

还可以通过call_user_func_array函数来调用一个函数。

  1. <?php
  2. namespace MyProject;//声明命名空间MyProject
  3.  
  4. class myClass{
  5. function myfunc($arg1,$arg2){
  6. echo " class name = ".__CLASS__."\n";
  7. echo " function name = ".__FUNCTION__."\n";
  8. echo " method name = ".__METHOD__."\n";
  9. echo " file dir = ".__DIR__."\n";
  10. echo " current line = ".__LINE__."\n";
  11. echo " name space = ".__NAMESPACE__."\n";
  12.  
  13. echo " arg1 = ".$arg1."\n";
  14. echo " arg2 = ".$arg2."\n";
  15. }
  16. }
  17. $myClass = new namespace\myClass();
  18. call_user_func_array(array($myClass,"myfunc"),array(1,2));
  19. ?>

输出结果如下:

  1. class name = MyProject\myClass
  2. function name = myfunc
  3. method name = MyProject\myClass::myfunc
  4. file dir = C:\wamp\www
  5. current line = 10
  6. name space = MyProject
  7. arg1 = 1
  8. arg2 = 2

其中:
__CLASS__ 类名称
__METHOD__ 方法名称
__FUNCTION__ 函数名称。
__DIR__ 文件目录
__LINE__ 当前行
__NAMESPACE__ 命名空间

call_user_func_array只接受两个参数,第一个是函数名,如果是引用类型,那么就应该使用数组。第二个是一个数组参数。

4.自定义函数库

自定义函数库需要使用到include和require方法,这两个方法都可以用于引入别的php文件。但是include方法在遇到错误后,脚本会继续执行。require方法在引入文件遇到错误后,脚本不会继续执行。
定义一个php文件,文件名为test1.php:

  1. <?php
  2. echo "I come from another php file<br/>";

然后再定义一个文件,文件名test2.php:

  1. <?php
  2.  
  3. include 'test1.php';
  4.  
  5. echo "<hr/>";
  6.  
  7. echo "I am this file content";

然后通过web浏览器,会看到如下输出结果:

在test2.php文件中成功引入了test1.php文件的内容。
require和include的功能类似,但是require在引入过程中,遇到错误的话,会终止脚本的执行。

如果我们执行如下代码:

  1. <?php
  2.  
  3. include 'test3.php';

其中test3.php文件不存在,这时候include会产生警告。

如果换成require的话,就会产生致命错误。

include和require每包含一次文件就会执行文件中的内容,如果只需要在最开始包含那次执行文件的内容,那么就可以用include_once()和require_once()方法。

5.闭包(Closure)的使用

PHP 5.3新添加了闭包的功能,PHP中的闭包目前和别的语言的闭包(比如javascript)不一样,javascript可以被认为是一种作用域,它默认继承父容器的作用域。然而在PHP中,必需手动绑定传递的参数。
看下面的案例:

  1. <?php
  2. function Calc($frombase){
  3. return function($number,$tobase) use($frombase){
  4. return base_convert($number, $frombase, $tobase);//转化为指定进制
  5. };
  6. }
  7. //得到一个从10进制开始转化的匿名函数
  8. $fun = Calc(10);
  9.  
  10. print "binary = ".$fun(20,2)."\n";
  11. print "octal = ".$fun(20,8)."\n";
  12. print "hex = ".$fun(20,16)."\n";
  13. ?>

输出结果为:

  1. binary = 10100
  2. octal = 24
  3. hex = 14

在上面的代码中使用use来传递在闭包中能够使用的父级属性。若有多个父级属性要在闭包中使用的话,那么在这些属性之前用逗号隔开就可以了。

【PHP】解析PHP中的函数的更多相关文章

  1. (转)解析PHP中ob_start()函数的用法

    本篇文章是对PHP中ob_start()函数的用法进行了详细的分析介绍,需要的朋友参考下     ob_start()函数用于打开缓冲区,比如header()函数之前如果就有输出,包括回车/空格/换行 ...

  2. 【OpenCV】解析OpenCV中copyMakerBorder函数

    Use the OpenCV function :copy_make_border:`copyMakeBorder <>` to set the borders (extra paddin ...

  3. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  4. Matlab中plot函数全功能解析

    Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...

  5. C++解析(16):友元与类中的函数重载

    0.目录 1.友元的尴尬能力 2.类中的函数重载 3.小结 1.友元的尴尬能力 什么是友元? 友元是C++中的一种关系 友元关系发生在函数与类之间或者类与类之间 友元关系是单项的,不能传递 友元的用法 ...

  6. 【Python】解析Python中函数的基本使用

    1.简介 在Python中定义函数的基本格式为: def <函数名>(参数列表): <函数语句> return <返回值> Python中的函数形式比较灵活,声明一 ...

  7. 【dva】model中effects函数的解析

    结构 effects: { *pageQuery({ payload = {} }, { select, call, put }) { const res = yield call(pageQuery ...

  8. eval解析JSON中的注意点

       在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery ...

  9. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

随机推荐

  1. Flume的概述和安装部署

    一.Flume概述 Flume是一种分布式.可靠且可用的服务,用于有效的收集.聚合和移动大量日志文件数据.Flume具有基于流数据流的简单灵活的框架,具有可靠的可靠性机制和许多故障转移和恢复机制,具有 ...

  2. 使用PHPStorm 配置自定义的Apache与PHP环境

    使用PHPStorm 配置自定义的Apache与PHP环境之一   关于phpstorm配置php开发环境,大多数资料都是直接推荐安装wapmserver.而对于如何配置自定义的PHP环境和Apach ...

  3. SpringBoot使用Swagger2实现Restful API

    很多时候,我们需要创建一个接口项目用来数据调转,其中不包含任何业务逻辑,比如我们公司.这时我们就需要实现一个具有Restful API的接口项目. 本文介绍springboot使用swagger2实现 ...

  4. angular笔记_7

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. QtQuick自定义主题以及控件样式指引

    自定义控件样式 请在Qt帮助索引中输入Customizing a Control进行查看 不过实际用下来感觉除非你想自己实现一套效果复杂的UI或是创造一个全新控件,比如:给UI添加模糊.虚化等Shad ...

  6. BZOJ.1210.[HNOI2004]邮递员(插头DP Hash 高精)

    BZOJ 洛谷 http://www.cnblogs.com/LadyLex/p/7326874.html 插头DP.\(m+1\)个插头的状态需要用三进制表示:\(0\)表示无插头,\(1\)表示是 ...

  7. CY7C68013 USB接口相机开发记录 - 第四天:上位机编写1

    前面学习了USB相机硬件固件.设备驱动,可以实现USB设备识别.数据发送的功能.然后,非常重要的一部分,USB设备发出的数据,我要怎么接受,怎么查看发送的数据是否是正确的.网上百度了下,大部分人都使用 ...

  8. LINUX文件及目录管理命令基础

    Linux命令行组成结构 Linux命令结构 在Linux中一切皆文件,一切皆命令! 命令提示符: [root@tt ~]# [xiaohui@tt ~]$ Linux命令行常用快捷键 ctrl + ...

  9. Navicat Premium for Mac的破解教程

          Navicat Premium for Mac破解教程 https://www.jianshu.com/p/f3ef78deadaa 时间戳: https://tool.lu/timest ...

  10. Android 去除应用标题栏(Android Studio)

    修改styles.xml文件 <resources> <!-- Base application theme. --> <style name="AppThem ...