浅谈php函数的参数的设定规则

  函数可以设定参数,也可以留空不进行设定。

1.当php函数设定形参,但是引用时实参不给,情况如下:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>php函数测试</title>
 6 </head>
 7
 8 <body>
 9 <?php
10 /*********************
11 *Author:瞎猫碰上死老虎***
12 *Date:2/6/2015********
13 *********************/
14
15 function asd($a,$b,$c){
16     echo $a+$b+$c;
17 }
18
19 asd();
20
21
22 ?>
23 </body>
24 </html>

结果为:

 1 Warning: Missing argument 1 for asd(), called in F:\phpfind\WWW\ceshi.php on line 19 and defined in F:\phpfind\WWW\ceshi.php on line 15
 2
 3 Warning: Missing argument 2 for asd(), called in F:\phpfind\WWW\ceshi.php on line 19 and defined in F:\phpfind\WWW\ceshi.php on line 15
 4
 5 Warning: Missing argument 3 for asd(), called in F:\phpfind\WWW\ceshi.php on line 19 and defined in F:\phpfind\WWW\ceshi.php on line 15
 6
 7 Notice: Undefined variable: b in F:\phpfind\WWW\ceshi.php on line 16
 8
 9 Notice: Undefined variable: a in F:\phpfind\WWW\ceshi.php on line 16
10
11 Notice: Undefined variable: c in F:\phpfind\WWW\ceshi.php on line 16
12 0

结论:会报错,但是也能显示出结果来。为0。

2.函数有形参,引用时,第一个实参什么都没有用逗号隔开,后面给实参。这个时候语法错误。这种写法在PHP是不支持的。如果你想这样,可以给NULL。示例如下:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>php函数测试</title>
 6 </head>
 7
 8 <body>
 9 <?php
10 /*********************
11 *Author:瞎猫碰上死老虎***
12 *Date:2/6/2015********
13 *********************/
14
15 function asd($a,$b,$c){
16     echo $a+$b+$c;
17 }
18
19 asd(NULL,3,7);
20
21
22 ?>
23 </body>
24 </html>

结果为:

1 10

3.现在来进行测试形参设置了默认参数的情况,情况如下:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>php函数测试</title>
 6 </head>
 7
 8 <body>
 9 <?php
10 /*********************
11 *Author:瞎猫碰上死老虎***
12 *Date:2/6/2015********
13 *********************/
14
15 function asd($a,$b=2,$c=5){
16     echo $a+$b+$c;
17 }
18
19 asd(3,7);
20
21
22 ?>
23 </body>
24 </html>

结果为:

1 15

结论:如果有默认形参,实参可以不给。实参的顺序是按照形参的顺序来的。如果函数参数中,参数的后面有默认形参,那么实参可以不给出对应的参数。函数将按默认形参代入计算。

4.再来看一种情况。这个时候三个参数中,就中间设置了默认形参。如果给了两个实参,这个情况是怎么样的呢。

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>php函数测试</title>
 6 </head>
 7
 8 <body>
 9 <?php
10 /*********************
11 *Author:瞎猫碰上死老虎***
12 *Date:2/6/2015********
13 *********************/
14
15 function asd($a,$b=2,$c){
16     echo $a+$b+$c;
17 }
18
19 asd(8,9);
20
21
22 ?>
23 </body>
24 </html>

结果为:

1 Warning: Missing argument 3 for asd(), called in F:\phpfind\WWW\ceshi.php on line 19 and defined in F:\phpfind\WWW\ceshi.php on line 15
2
3 Notice: Undefined variable: c in F:\phpfind\WWW\ceshi.php on line 16
4 17

结论:引用函数的时候,实参的顺序跟形参一一对应。如果无默认形参,不给相应的实参则会报错。当有默认形参在函数的参数组后面,这个时候省略是不会出现错误的,函数将按照默认形参参与运算。

5.现在来看看形参的设定为NULL,实参为空的情况。

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>php函数测试</title>
 6 </head>
 7
 8 <body>
 9 <?php
10 /*********************
11 *Author:瞎猫碰上死老虎***
12 *Date:2/6/2015********
13 *********************/
14
15 function asd($a=NULL,$b=2,$c=9){
16     echo $a+$b+$c;
17 }
18
19 asd();
20
21
22 ?>
23 </body>
24 </html>

结果为:

1 11

结论:形参设置了NULL,也相对于设置了默认参数。这个时候不会报错。

6.形参为NULL,实参有数值。

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>php函数测试</title>
 6 </head>
 7
 8 <body>
 9 <?php
10 /*********************
11 *Author:瞎猫碰上死老虎***
12 *Date:2/6/2015********
13 *********************/
14
15 function asd($a=NULL,$b=2,$c=9){
16     echo $a+$b+$c;
17 }
18
19 asd(9,9);
20
21
22 ?>
23 </body>
24 </html>

结果:

1 27

结论:显然,这个时候函数还是按照形参顺序代入进行运算。

时间: 2024-08-16 18:17:41

浅谈php函数的参数的设定规则的相关文章

浅谈intval()函数用法

1 <?php 2 $sql=mysql_query("select count(*) as total from tb_leaveword ",$conn); 3 $infos=mysql_fetch_array($sql); 4 $total=$infos['total']; //获取总留言条数 5 if($total==0){ //如果总留言条数为0,则给出提示 6 echo "<div align=center>对不起,暂无留言!</div&g

浅谈javascript函数劫持

http://www.xfocus.net/articles/200712/963.html 浅谈javascript函数劫持 文章提交:hkluoluo (luoluonet_at_hotmail.com) by luoluo on 2007-11-30 luoluonet_at_yahoo.cn http://www.ph4nt0m.org 一.概述 javascript函数劫持,也就是老外提到的javascript hijacking技术.最早还是和剑心同学讨论问题时偶然看到的一段代码,大

开发技术--浅谈Python函数

开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式,解读知识点.力求通俗易懂,完美透析知识. 正文 首先介绍函数是什么,接着走进函数,并且发现函数的高级使用方法,最后列出常用的Python的内置函数. 函数是什么? 1.函数,在代码执行的是不执行,只有在调用函数的时候才会执行. 2.函数使用

【python】浅谈enumerate 函数

enumerate 函数用于遍历序列中的元素以及它们的坐标: >>> for i,j in enumerate(('a','b','c')):  print i,j 0 a 1 b 2 c >>> for i,j in enumerate([1,2,3]):  print i,j 0 1 1 2 2 3 >>> for i,j in enumerate({'a':1,'b':2}):  print i,j 0 a 1 b >>> fo

浅谈getaddrinfo函数的超时处理机制

在sockproxy上发现,getaddrinfo 解析域名相比ping对域名的解析,慢很多.我觉得ping用了gethostbyname解析域名.问题变为getaddrinfo解析域名,是否比 gethostbyname慢.写测试程序,分别用getaddrinfo和gethostbyname解析,发现getaddrinfo确实慢. strace跟踪发现,getaddrinfo和DNS服务器通信10次,gethostbyname和DNS服务器通信2次. gethostbyname是古老的域名解析

libsvm代码阅读(2):svm.cpp浅谈和函数指针(转)

svm.cpp浅谈 svm.cpp总共有3159行代码,实现了svm算法的核心功能,里面总共有Cache.Kernel.ONE_CLASS_Q.QMatrix.Solver.Solver_NU.SVC_Q.SVR_Q 8个类(如下图1所示),而它们之间的继承和组合关系如图2.图3所示.在这些类中Cache.Kernel.Solver是核心类,对整个算法起支撑作用.在以后的博文中我们将对这3个核心类做重点注解分析,另外还将对svm.cpp中的svm_train函数做一个注解分析. 图1 图2 图3

浅谈回调函数

最近学习js的异步执行,用到回调函数,对这个机制不是很理解,故查了一些资料,在此整理分享一下自己的理解. 维基百科对回调函数的定义: 在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 知乎上一个网友提供的生动描述: 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打

【JS笔记系列】浅谈JavaScript函数

JavaScript作为一种基于对象(非严格面向对象)的语言,函数在JS中的地位非同一般:用函数声明类和对象.甚至函数本身也是对象. 一.函数的三种声明方式辨析. 1.function命令 function printAbc(){ console.log('ABC'); } 2.函数表达式(变量赋值形式) var printAbc = function (){ console.log('ABC'); }; 注意:1.使用函数表达式形式时务必要有分号. 2.此时function后函数名可有可无,且

浅谈JavaScript函数重载

上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都很难,根本回答不上来.不过那天晚上,还是很惊喜的接到了HR面电话.现在HR面试的结果还没有出来,听说要等到下周二才出,所以再好好等几天哈. 前面说了这多的废话,现在是时候和伙伴们分享一下面试干货哈.因为二面问到的内容还挺多的,所以这里就不全部列举出来了.这里只讨论一下函数的重载. 下面是面试时的对话,“面”指面试官,“我”就是我~ 面:你能说说JS怎么实现函数的重载吗?