ZendChina | Zend中文权威资讯's Archiver

ZendChina 发表于 2008-2-26 17:03

《Zend PHP 5 Certification》——函数

ZendChina官方:随着Zend PHP 认证试题的推出,相信大家都会想了解Zend PHP证书的考试大纲是什么?所以我们找到了《Zend PHP 5 Certification》(Zend PHP5 证书学习指南,是最新的PHP5版,目前贴出来的题目都是PHP4版的),下面将分章节把要求掌握的要点列出,便于请大家深入学习。

本书读者对象:
[list][*]For candidates who are preparing for the Zend exam  (准备考证书的人)[*]For student of instructor-led classes who are approaching and studying PHP for the first time (参加培训班的PHP新学员)[/list]
[size=4][b]第二章: 函数[/b][/size]
       PHP编程的核心是函数。把部分代码封装起来,让其能循环使用,这是过程编程和OO编程的共同基础。本章集中在建造和管理函数。因此本章重点在怎么写函数,而不是怎么用函数。

[b]基本语法结构[/b]
       用一个关键词 “function”,一个函数名,一对园括号,一对大括号:
function name() { }
       函数名不分大小写,但只能用字母,数字,和下连接号组成,开始不能是数字。函数执行的内容放在大括号内,要使用函数时,调用函数名。 如:
[php]function hello()
{
echo "Hello World!";
}
hello(); // 显示 "Hello World!"[/php]

[b]返回值[/b]
       PHP的所有函数都有返回值。因此PHP没有“空(void)”函数的概念。人们可以用“return”这个关键词来返回函数的值 (注意,不用“return”,函数也有返回值):
[php]function hello()
{
return "Hello World"; // 没有输出显示
}
$txt = hello(); // 指定返回值 "Hello World" 给 $txt
echo hello(); // 显示 "Hello World"
return 也可中断函数运行并退出。如:
function hello($who)
{
echo "Hello $who";
if ($who == "World") {
return; // 函数不再继续运行下去。
}
echo ", how are you";
}
hello("World"); // 显示 "Hello World"
hello("Reader") // 显示 "Hello Reader, how are you?"[/php]
注意,即使没有让函数返回一个值,但PHP会迫使函数返回一个NULL值。

       函数也可以定义返回一个引用(reference),这样函数返回一个变量,而不是一个复制。这通常用在返回一个资源(resources)时(如数据库连接),或实施工厂模式时。有一点要注意:必须返回一个变量,不能用引用返回一个表达式,或者用空的返回句子来强迫返回一个NULL值。
[php]function &query($sql)
{
$result = mysql_query($sql);
return $result;
}
// 下面用法不正确。
function &getHello()
{
return "Hello World";
}
// 这种用法会产生一个警告。
function &test()
{
echo ’This is a test’;
}[/php]

[b]变量范围[/b]
       PHP有三种变量范围。全局变量,函数变量,类变量。
       全局变量能用于整个脚本。在函数和类的外面定义变量时,此变量就是全局变量。类变量在OO编程篇讨论。
       任何在函数内定义的变量,在函数结束后就不再存在。这样就不用担心其他地方用同名时会发生冲突。
[php]$a = "Hello World";
function hello()
{
$a = "Hello Reader";
$b = "How are you";
}
hello();
echo $a; // 将输出 Hello World
echo $b; // 将产生一个警告[/php]
在函数内有两个方法可以使用全局变量:
第一种是用global句子。
[php]$a = "Hello";
$b = "World";
function hello()
{
global $a, $b;
echo "$a $b";
}
hello(); // 显示 "Hello World"[/php]
很多人认为用global容易产生问题,因此大多数用$GLOBALS 超级全局数组:
[php]$a = "Hello";
$b = "World";
function hello()
{
echo $GLOBALS[’a’] .’ ’. $GLOBALS[’b’];
}
hello(); // 显示 "Hello World"[/php]

[b]变量长度参数涟表 (Variable-length Argument Lists)[/b]
       在定义函数时,通常会犯这样的错误:
[php]function f ($optional = "null", $required)
{
}[/php]
运行时虽然不会出现错误信息,但对参数传递是毫无意义的。因为用户不能忽视第一个参数,而只传第二个参数给函数。如果只传一个参数,会出现错误信息。
       在这种情况下,用户就应该用变量长度参数涟表。它可让函数根据不同情况,接受数量变化的参数。
此行为的典型例子可以通过printf()类的函数展现出来。
       PHP有三个处理变量长度参数涟表的函数:func_num_args(), func_get_arg() and func_get_args().
如:
[php]function hello()
{
if (func_num_args() > 0) {
$arg = func_get_arg(0); // 第一个参数位置是 0
echo "Hello $arg";
} else {
echo "Hello World";
}
}
hello("Reader"); // 显示 "Hello Reader"
hello(); // 显示 "Hello World"[/php]
即使函数头里已经定义了参数,用户仍然可以使用变量长度参数涟表,而且不影响变量长度参数涟表的行为。
如:
[php]function countAll($arg1)
{
if (func_num_args() == 0) {
die("你要输入至少一个参数");
} else {
$args = func_get_args(); // 返回参数数组
    //从开始处移去定义的参数
array_shift($args); //移去”foo“
$count = strlen ($arg1); //提取”foo“长度
foreach ($args as $arg) {
$count += strlen($arg);
}
}
return $count;
}
echo countAll("foo", "bar", "baz"); // 显示 ’9’[/php]

[b]参数传递[/b]
       可以把一些值注入函数内,来影响函数的行为:
[php]function hello($who)
{
echo "Hello $who";
}
hello("World");
/* 在这里放入 "World", 函数将显示 "Hello World" */
可以传递多于函数定义参数数量的参数给函数,但不能传递少于函数定义参数数量的参数给函数:
function hello($who)
{
echo "Hello $who";
}
hello("World",“another world"); //允许
hello(); //不允许
传到函数的参数可以有缺省值:
function hello($who = "World")
{
echo "Hello $who";
}
hello();
/* 没有参数传递, $who 缺省指定为 "World" */[/php]

[b]通过引用传递参数[/b]
       可以使用 & 符号来传递一个应用参数给函数:
[php]function countAll(&$count)
{
if (func_num_args() == 0) {
die("You need to specify at least one argument");
} else {
    $args = func_get_args(); // 返回参数数组
    // 从开始处移去定义的参数
    array_shift($args);
    foreach ($args as $arg) {
    $count += strlen($arg);
    }
}
}
$count = 0;
countAll($count, "foo", "bar", "baz"); // $count 现在等於 9[/php]
注意:只有变量可以用引用传递,表达式不能用引用传递。
与PHP4不同,PHP5可以设定引用参数的确省值:
[php]function cmdExists($cmd, &$output = null) {
$output = ‘whereis $cmd‘;
if (strpos($output, DIRECTORY_SEPARATOR) !== false) {
return true;
} else {
return false;
}
}[/php]
在以上这个例子,参数$output 完全是可选项。

[b]小结[/b]
       函数是PHP语言相当重要的部分。用户要相当了解函数的定义和结构,包括引用参数和变量长度参数涟表。考试中会有大量关于函数的题目。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.