免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1577 | 回复: 0
打印 上一主题 下一主题

php基础函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-15 14:54 |只看该作者 |倒序浏览
php基础函数

PHP基础教程之函数篇:
1.1
什么是函数呢?
将一些重复的过程嵌入在一个命名的代码块中,然后在必要的时候调用这个名.这个代码块称为函数(function);
2.1.1创建函数:
php提供了一个预定义的语法模式来定义一个函数,如下:

CODE:
function function_name(paramenters){
function-body
}
例如下面的函数:
function footer(){
echo " 新疆PHPer交流论坛
";
}


这样定义后可以在任何地方调用:

CODE:
<?php
footer();
?>


2.1.2 按值传递参数:
向函数传递数据是常用的功能.例如要比较两个数的大小:

CODE:
function Max($a,$b){
$max=$a>$b?$ab; //这里用到一个三元运算,即当$a>$b时,$max=$a,否则$max=$b
}

在这里函数接受了两个参数,$a和$b,可以这样调用函数:
Max(6,;
也可以向函数传递变量:
2.1.2-L1

CODE:
<?php
$a=6;
$b=8;
Max($a,$b);
?>


这中方式称为按值传递或者传值(passing by value),这样的话,函数范围内对这些值的任何改变都在函数外部被忽落掉.
2.1.3 按引用传递参数:
这种方式区别与2.1.2的方式,它可以让函数内部对参数的改变在外部得到体现,按引用传递参数(也称传引用)要在参数前面加上&符号.
例2.1.3-L1

CODE:

<?php
$a=2006;
$b=2007;
function cont(&$a,$b){
$a+=$b;
$b+=$a;
}
cont($a,$b);
echo "a:".$a."
";
echo "b:".$b."
";
?>


输出的应该是:
a的值是:4013
b的值是:2007
此时$a已经变为4013,而b并没有变化.
2.1.4
默认参数值:
给函数的参数设置一个默认值后,如果在没有提供这个参数的时候,函数就会把这个默认值赋值给该参数.

CODE:
<?php
$a=2007;
function cont($a,$b=2006){
echo $b;
}
cont($a);
?>
[code]
输出为:2006
给定参数默认值的时候,注意必须是常数表达式,而不能指定函数调用或变量等非常量值.
2.1.5
可选参数:
你也可以设置某参数为可选(optional)参数,不过这个参数要放在参数列的最后一位,并且要设置默认值为空:
[code]
function sum($a,$b,$c=''){
$sum=$a+$b+$c;
echo $sum;
}

如果你有多个参数的时候,也可以选择性的传递参数:

CODE:
function sum($a,$b='',$c=''){
echo $a+$b+$c;
}

调用sum的时候可以只传递$a和$c:

CODE:
sum(2046,'',200;

2.1.6
从函数返回值
一般情况下,脚本的结果可能取决与函数的结果,也可能取决与在执行函数时对数据的修行,而由于变量作用域的差异,函数体无法很容易的将信息传递给调用者,这个时候就可以通过
return关键字向调用者传递数据.
1.return()
return()语句可以向函数调用者返回任意的数值,将程序控制权返回到调用者的作用域.如果return()在全局作用域内调用,将终止脚本的执行.
返回刚才的sum()函数,计算的结果暂时不能显示给用户,而是将这个值返回给调用块:


[Copy to clipboard]
CODE:
function sum($a,$b,$c=''){
$sum=$a+$b+$c;
return $sum;
}


也可以不需要赋值给$sum:

CODE:
function sum($a,$b,$c=''){
return $a+$b+$c;
}


2.返回多个值
这里以构造函数list()为例说明返回多个值:
例:2.1.6-L1

CODE:
<?php
function getmicrotime(){
return explode(" ",microtime());
}
list($msec, $sec)=getmicrotime();
echo $msec."
";
echo $sec."
";
?>

注解: micrtime()函数是返回当前 UNIX 时间戳和微秒数,返回格式为“msec sec”的字符串,其中 sec 是当前的 Unix 时间戳,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。
explode()是使用一个字符串分割另一个字符串,这里用来分割micrtime()得到的两个值组成的一个字符串.
调用getmicrotime()函数后,此时返回的是两个值,$msec和$sec;
这个函数可以丰富一下用来做检测程序运行时间

CODE:
<?php
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec); //注意这里只是返回一个两个数值的和
}
$time_start = getmicrotime();
for($i=0;$i<1000;$i++){
echo $i;
}
$time_end = getmicrotime();
echo "\n\n[执行时间: " . ($time_end - $time_start) . "秒]\n\n";
?>

2.1.7 嵌套函数:
PHP支例:2.1.7-L1

CODE:
持嵌套函数(nesting function),即在函数中定义并调用其他函数.
php
function max_a($a,$b){
$rmb=$a+$b;
function Rmb_usa($rmb,$default=7.{
return $rmb*$default;
}
return Rmb_usa($rmb);
}
echo max_a(7,;
?>

另外,PHP并不限制嵌套函数的作用域,上面的Rmb_usa()在外面也可以调用.
2.1.8递归函数:
递归函数(recursive function)即调用自身的函数.
这里借用手册里面的一个例子:
例:2.1.8-L1

CODE:
<?php
function recursion($a){
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>

调用递归函数要避免递归函数/方法调用超过 100-200 层,因为可能会破坏堆栈从而使当前脚本终止.
2.1.9变量函数:
变量函数(variable function),是指这个函数名在在执行前还要计算,也就是说,函数名直到执行时才确定.
就像正常的变量一样,前面有"$"的符号,例如foot();
例:2.1.9-L1


CODE:
<?php
function foot(){
echo "这个是变量函数调用的函数foot";
}
function foox(){
echo "这个是变量函数调用的函数foox";
}
$foo='foot';
$foo();
?>

可以这么理解,当给$foo赋值后,在$foo后面带个圆括号(即foo()),此时PHP 将寻找与变量的值同名的函数,并且将尝试执行它,如果没有这个函数,将报错.
但是这个函数有一定的危险系数,用是谨慎.例如.

CODE:
$foo='exec';
$command='rm -rf';
$foo($command);

这样php的exec()命令将执行'rm -rf',也就说从根目录开始递归的删除所有文件,结果自己想想....

ok,PHP基础教程之函数篇到这里告一段落,很多东西都是搬过来的,错误之处难免,希望各位不吝指正.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP