鸦鸦 发表于 2017-3-4 12:30:50

PHP实践之路(七)PHP函数

  PHP实践之路(目录索引)
  

PHP函数

1、函数名
  a、函数名以字母或下划线打头,后面跟字母,数字或下划线(大小写无关)
  b、所有函数和类都具有全局作用域,可以在内部定义外部调用,反之亦然。
  c、不支持函数重载,也不可能取消定义或者重定义已声明的函数
  d、函数的调用必须是先定义后使用
  e、任何有效的 PHP 代码都有可能出现在函数内部,甚至包括其它函数和类定义
  接下来实验一下

<?php
function foo(){
echo "Hello World<br />";
}
foo();//函数的调用,输出Hello World
/*
此处函数重复定义,因为函数名大小写无关,所以函数foo和函数FOO被认为是同一个函数,编译
报错:Fatal error: Cannot redeclare FOO()
function FOO(){
echo "do something";
}
*/
function outer(){
echo "outer function executed..<br />";
//函数内部定义函数
function inner(){
echo "inner function executed..<br />";
}
}
//如果根据函数调用必须是先定义的规则,如果我们直接调用inner()函数将出错
//inner();//此处出错:Fatal error: Call to undefined function inner()
//如果我们先调用outer()函数,然后再调用innner()函数就好了,调用outer()后,inner()函数将被认为是已定义
outer();//输出 outer function executed..
inner();//函数具有全局作用域,内部定义外部也可以使用。输出 inner function executed..
?>
  


2、函数参数
  a、函数参数的传递有三种方式:按值传递、引用传递和默认参数三种
  b、任何默认参数必须放在任何非默认参数的右侧
  c、可变参数列表,支持不固定参数个数及类型的参数传递方式。可变参数列表方式必须使用func_num_args(),func_get_arg() 以及func_get_args()三个函数
  针对以上知识点,我们动动手吧

<?php
//按值传递参数
function sayHello($name){
$name="[".$name."]";//修改$name的值
echo "Hello ".$name."<br />";
}
$name = "jack";
sayHello($name);//输出Hello
echo $name;//$name没有发生变化,输出jack
echo "<br />";//换行
//引用传递
function sayHello2(&$name){
$name="[".$name."]";//修改$name的值
echo "Hello ".$name."<br />";
}
sayHello2($name);//输出Hello
echo $name;//$name已经发生了变化,输出
echo "<br />";//换行
//默认参数
function sayHello3($name = "somebody"){
$name="[".$name."]";//修改$name的值
echo "Hello ".$name."<br />";
}
sayHello3();//采用默认参数值,输出Hello
sayHello3("lucy");//采用传递的参数值,输出Hello
//任何默认参数必须放在任何非默认参数的右侧
/*
以下函数的定义将导致调用sayMore("How do you do");出错,它默认将传入的参数
赋值给了$name,而$more的值确遗失了
function sayMore($name = "somebody",$more){
$name="[".$name."]";
echo "Hello ".$name." ".$more."<br />";
}
*/
function sayMore($more,$name = "somebody"){
$name="[".$name."]";
echo "Hello ".$name." ".$more."<br />";
}
sayMore("How do you do");//输出Hello How do you do

//以下测试可变参列表的使用
function showFamilyMembers(){
$num = func_num_args();//通过func_num_args()函数获取参数的数量
for($i=0;$i<$num;$i++){
echo func_get_arg($i);//通过func_get_arg()函数获取具体某个参数的值
echo " ";
}
echo "<br />";//换行
}
showFamilyMembers("jack","lucy");//输出:jack lucy
showFamilyMembers("jack","lucy","lily");//输出:jack lucy lily
//第二种方式获取参数列表
function showFamilyMembers2(){
$members=func_get_args();//通过func_get_args()函数获取参数列表
foreach($members as $member){
echo $member;
echo " ";
}
echo "<br />";//换行
}
showFamilyMembers2("jack","lucy");//输出:jack lucy
showFamilyMembers2("jack","lucy","lily");//输出:jack lucy lily
?>
  


3、函数返回值

a、函数只能返回一个值,如果需要返回多个值时可以采用返回数组的方式

b、从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 &

函数的返回值这块相对比较简单,需要了解的内容也比较少,接下来简单测试一下

<?php
function getOneColor(){
return "red";//返回一个值
}
function getMoreValue(){
$arr=array("red","blue","orange");//返回多个值
return $arr;
}
echo(getOneColor());//输出val1
echo "<br />";
var_dump(getMoreValue());
/*输出
array (size=3)
0 => string 'red' (length=3)
1 => string 'blue' (length=4)
2 => string 'orange' (length=6)
*/
echo "<br />";
/********以下测试返回引用***********/
class test {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new test;
$myValue = &$obj->getValue();
echo $myValue;                // 输出42
echo "<br />";
$obj->value = 2;
echo $myValue;                // 输出2
?>





4、可变函数

a、变量后面跟上圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它

b、可变函数一般用来实现函数的回调

实验时间

<?php
function sayHello($name = "somebody"){
echo "Hello ".$name;
}
$func="sayHello";
$func();//输出Hello somebody
echo "<br />";//换行
$func("jack");//输出Hello jack
?>





版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: PHP实践之路(七)PHP函数