php自定义函数

在PHP中我们同样可以自己来定义函数。我们通过自定义函数可以使我们的程序代码结构清晰易懂。我们通过模块化的程序结构设计,可以很大程度的减少我们的工作量,从而提高我们的工作效率。 函数的定义语法: function 函数名 (参数列表) { 函数功能; } 任何有效的 PHP 代码都有可能出现在函数内部,甚至包括其它的函数和已定义类。 如果一个函数以以下两个范例的有条件的方式定义,其条件定义必须在调用之前完成。 例子:有条件的函数 <?php $makefoo = true; /*现在我们在这不能调用自定义函数foo(),因为它还不存在。但是能调用bar()。 */ bar(); if ($makefoo) { function foo () { echo “在程序没有执行到if语句以前foo()函数不存在。<br>”; } } /* 现在我们能调用foo(),因为 $makefoo的条件已经满足且为真 */ if ($makefoo) foo(); function bar() { echo “在程序一开始bar()立刻存在。<br>”; }?> 例子: 函数中的函数 <?php function foo() { function bar() { $str= “在函数 foo() 被调用前bar()不存在。<br>”; return $str; } } foo(); $str=bar(); echo $str; ?> 我们从以上可知,当调用函数中的内部函数时必须按照我们定义函数时的顺序从外到内依次都调用到才行,否则程序将会提示找不到自定义函数。 PHP 不支持函数重载,可能也不支持取消定义或者重定义已声明的函数。 注意: 函数名是对大小写敏感的,不过在调用函数的时候,通常使用其在定义时相同的形式。 函数的参数: 通过函数的参数列表可以传递信息到函数内部,参数列表是一系列以逗号作为分隔符的变量和常量列表。 PHP 支持数值参数(默认), 变量参数, 和 默认参数值。 可变长度参数列表仅在 PHP 4 和后续版本中支持。例子:向函数传递数组 function takes_array($input) { echo “$input[0] + $input[1] = “, $input[0]+$input[1]; } 1、变量参数(关联参数): 缺省情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它 并不会改变函数外部的值)。如果你希望允许函数修改它的参数值,你可以使用变量参数。 如果想要函数的一个参数总是变量参数,你可以在函数定义中该参数的 前面预先加上引用操作符号(&): 例子:变量参数 <? function foo( &$bar ) { $bar .= ” and something extra.”; } $str = “This is a string, “; foo( $str ); echo $str; // outputs “This is a string, and something extra.” ?>我们还可以通过以下方法来修改函数的参数值。例: <? function foo( $bar ) { $bar .= ” and something extra.”; } $str = “This is a string, “; foo( $str ); echo $str; // outputs “This is a string, “ foo( &$str ); echo $str; // outputs “This is a string, and something extra.” ?> 2、默认参数的值: 函数可以定义 C++ 风格的标量参数默认值,如下: 例子: 函数中默认参数的用途 <?php function makecoffee ($type = “cappuccino”) { return “Making a cup of $type.\n”; } echo makecoffee (); echo makecoffee (”espresso”); ?> 上述片断的输出是: Making a cup of cappuccino. Making a cup of espresso. 默认值必须是标量,不是(比如)变量或者类成员。 请注意:当使用默认参数时,任何默认参数必须放在任何非默认参数的后面;否则, 可能函数将不会按照预期的情况工作。考虑下面的代码片断: 例子: 函数的默认参数不正确的用法 <?php function makeyogurt ($type = “acidophilus”, $flavour) { return “Making a bowl of $type $flavour.\n”; } echo makeyogurt (”raspberry”); // 不会按我们预期的那样工作,产生警告。 ?> 上述例子的输出结果: Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41 Making a bowl of raspberry . 现在,比较上面的例子和这个例子: 例子: 函数默认参数正确的用法 <?php function makeyogurt ($flavour, $type = “acidophilus”) { return “Making a bowl of $type $flavour.\n”; } echo makeyogurt (”raspberry”); // 正常工作。 ?> 这个例子的输出结果是: Making a bowl of acidophilus raspberry. 3、可变长度参数列表 PHP 4 已经在用户自定义函数中支持可变长度参数列表。这个真的很简单, 通过在用户自定义函数里面使用 func_num_args(),func_get_arg(),和 func_get_args() 函数来操作自定义函数的参数值,如果在函数外面使用这三个函数将会返回出错警告。三个函数的具体用法看下页。无需特别的语法,参数列表仍然能够被明确无误 的传递给函数并且正常运转。 int func_num_args ( void ) 返回值:整数。返回当前用户自定义函数的变量参数数。 例子: <?php function foo() { $numargs = func_num_args(); echo “变量数: $numargs\n”; } foo (1, 2, 3); // Prints ‘变量数: 3′ ?> mixed func_get_arg ( int arg_num) 返回值:混合型。根据int arg_num从用户自定义函数的可变长度参数列表中获得一个具体参数值。int arg_num从0开始。如果int arg_num数值大于用户自定义函数的可变长度参数列表的实际数,将产生一个警告且函数将返回假值。 例子: <?php function foo() { $numargs = func_num_args(); echo “变量数: $numargs<br>\n”;//print’变量数:3′ if ($numargs >= 2) { echo “第三个变量是: ” . func_get_arg (2) . “<br>\n”;//print’你好!’ } echo “第十个变量是: ” . func_get_arg (9) . “<br>\n”;//函数返回假值并产生一个警告 } foo (1, 2, “你好!”); ?> array func_get_args ( void ) 返回值:数组。返回一个由用户自定义函数参数列表组成的数组。 <?php function foo() { $numargs = func_num_args(); echo “变量数: $numargs<br>\n”; if ($numargs >= 2) { echo “第二个变量是: ” . func_get_arg (1) . “<br>\n”; } $arg_list = func_get_args(); for ($i = 0; $i < $numargs; $i++) { echo “变量$i 是: ” . $arg_list[$i] . “<br>\n”; } } foo (1, 2, 3); ?> 函数的返回值 函数的值通过使用可选的返回语句返回。任何类型都可以返回,其中包括列表和对象。 这将导致函数立即结束它的运行,并且将控制权传递回它被调用的行。 例子:return() 函数的用法 <?php function square ($num) { return $num * $num; } echo square (4); // outputs ‘16′. ?> 函数不能返回多个值,但为了获得简单的结果,可以返回一个列表。 例子:返回一个数组以得到多个返回值 <?php function array_numbers() { return array (0, 1, 2); } list ($zero, $one, $two) = array_numbers(); ?> 从函数返回一个引用,你必须在函数声明和指派返回值给一个变量时都使用引用操作符 & : 例子: 由函数返回一个引用 <?php function &returns_reference() { return $someref; } $newref =& returns_reference(); ?> 变量函数 PHP 支持变量函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找 与变量的值相同的函数,并且将尝试执行它。除了别的事情以外,这个可以被 用于实现回调函数,函数表等等。 注意:变量函数不能用于语言结构,例如 echo()、print()、unset()、isset()、empty()、include()、require() 以及类似的语句。您需要使用您自己的外壳函数来将这些结构用作变量函数。 例子: 变量函数示例 <?php function foo() { echo “In foo()<br>\n”; } function bar($arg = ”) { echo “In bar(); argument was ‘$arg’.<br>\n”; } //输出函数自己的参数 function echoit($string) { echo $string; } $func = ‘foo’; $func(); // 调用函数 foo() $func = ‘bar’; $func(’test’); //调用函数 bar() $func = ‘echoit’; $func(’test’); // 调用函数 echoit() ?> 您还可以利用变量函数的特性来调用一个对象的方法。 例子: 变量方法范例 <?php class Foo { function Aar() { $name = ‘Bar’; $this->$name(); // 调用 Bar() 方法 } function Bar() { echo “This is Bar”; } } $foo = new Foo(); $funcname = “Aar”; $foo->$funcname(); // 调用 $foo->Aar() ?> 来源:http://skyfree2000.blog.163.com/blog/static/2013063220083269162858/
posted @ 2012-04-19 23:35  二宝的博客  阅读(309)  评论(0编辑  收藏  举报