您的位置:首页 > 编程语言 > PHP开发

php函数

2016-05-19 19:33 309 查看

1.函数return

当函数语句运行完之后,执行权就交回.

或者是碰到 return 之后,函数也会交回执行权.

*/

function bar() {

echo 'a';

echo '<br />';

return;

echo 'b';

echo 'c';

}

echo '<hr />';

echo 'x','<br />';

bar();

echo 'z','<br />';

function test() {

return 'hello';

return 'wolrd';

}

echo '哈哈<br />';

echo test();

echo '呵呵<br />';

/***

上面的例子,体现了函数碰到return,就交回执行权.

一个函数如果在return 后面写一些语句-----没有意义的.

***/

?>

2.超全局变量

027-超全局变量

<?php

/*

一般情况下,页面内声明的"普通全局变量",

在函数内访问不到.

但是: 常量 在函数能访问到

而且,还有一类变量 ----- 超级变局变量.

超级全局变量,非常猛, 在页面的任意一处,

无论是多深层的函数内,还是以后的对象的方法体内.都可以直接访问到.

*/

/*

九大超级变局变量[注意,全大写]

$_GET // 地址栏的参数

$_POST // 接POST型的表单参数经(比如,用户注册时的内容,往往用$_POST来接)

$_REQUEST // 默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组,即$_REQUEST是前3者一个并集

// 比如不想区分 $_GET,$_POST,可以用$_REQUEST来代替

$_FILES // 文件上传时学

$_COOKIE //

$_SESSION // 用户登陆时学

$_ENV

$_SERVER // 服务器还有访客的一些信息

$GLOBALS // 所有变量的一个注册表

*/

3.函数变量

1. 考考你,对形参,实参理解了没有?

function foo($num) {

$num +=1;

$num *=2;

$num /= 3;

$num +=999;

return $num;

}

$price = 100;

echo foo($price),'<br />';

echo $price;

// 因为,在函数运行,$price的(值) 传递给 $num

// 因此,函数体内的$num,无论怎么变,和$price无关了.

2-实参传值过程详解

// 形参与实参的顺序/个数的关系.

// 实参的值,要赋给形参变量

/*function foo($x,$y,$z) {

return 2*$x + 3*$y + $z;

}

echo foo(1,2,3),'<br />';

// 在调用的过程中,

// 实参,形参,从左到右,严格的逐一对应.[对号入座]

// 一一对应上,然后实参值,挨个儿赋给形参.

/****

如果实参少于形参,没对应上

****/

// echo foo(1,2); // warning警告,并尽量往下执行.

/****

如果实参多于形参,

****/

//echo foo(1,2,3,4,5,6,7),'<br />'; // 还是11

// 因为实参对号给形参赋值时, 后面多出来的实参,将会被舍弃掉. 没有其他副作用.

// 参数默认值

// 来人,报国籍.

// 要是指明自己是某国人,即说我来自某国

// 不指明,就默认为"中国"

function intro($country='中国') {

echo '我来自',$country,'<br />';

}

intro();

/**

intro($country='中国') {

$country='中国';

echo '我来自',$country,'<br />';

}

**/

intro('美国');

/*

intro($country='中国') {

$country='中国';

$country='美国';

echo '我来自',$country,'<br />';

}

*/

intro('日本');

/*

intro($country='中国') {

$country='中国';

$country='日本';

echo '我来自',$country,'<br />';

}

*/

/*****

默认参数,并不能改变 实参与形参 严格按顺序赋值的原则.

*****/

function sum($x=4,$y,$z) {

return 2*$x + 3 * $y + $z;

}

// sum(5,6); // 行吗?

/*

5--->$x

6--->$y

没有值--->$z

sum($x=4,$y,$z) {

$x = 4;

$x = 5;

$y = 6;

// z 没有接到值.

return 2*$x + 3 * $y + $z;

}

*/

// 想一想,既然有了默认参数,调用时,又没能少传实参?

// 想一想,怎么样才能少传一个实参,利用上默认参数?

// 番茄回答, 把','把第一个参数空出来 (点评:高,实在是高)

// sum(,5,6); // 行不通,语法错误

// 如果参数有默认值的话,要把该参数,写到最后面

// 见09.php

?>

<?php

// 函数参数与默认值

function sum($x,$y=3,$z=4) {

return $x + 2*$y + 3*$z;

}

echo sum(1),'<br />';

/**

sum($x,$y=3,$z=4) {

$x = null;

$y = 3;

$z = 4; // 这3行,是函数声明引起的

$x = 1; // 这1行,是函数调用,传实参引起的.

return $x + 2*$y + 3*$z;

}

**/

echo sum(1,2); // 17

/**

sum($x,$y=3,$z=4) {

$x = null;

$y = 3;

$z = 4; // 这3行,是函数声明引起的

$x = 1;

$y = 2; // 这2行,是函数调用,传实参引起的.

return $x + 2*$y + 3*$z;

}

**/

/***

函数可以设置默认值.

有默认值参数一般后面.

如果某个有默认值的形参,对应位置传了实参

那么,实参的值 将要覆盖 默认值.

***/

?>

022-函数的作用域

<?php

// 函数与变量的作用域

$num = 5;

function t() {

$num = 9;

}

t();

echo $num,'<br />'; // 5

/**

默认状况下,

PHP中,

函数运行时, 有其自己,独立的变量空间.

函数体内的变量,与外界的变量,无关.

即使是变量的名字相同.

**/

/**

当函数调用时,系统为其申请一块独立的"调用空间"

函数体内的变量,在其独立的"调用空间内",

与外界的变量无关.

内部叫:局部变量

外部叫:全局变量

**/

function t2() {

echo $num;

}

t2();

// 局部内,即t2的空间内,有$num变量吗?

// 没有,虽然全局内有$num,但PHP中,函数并不会去全局寻找$num

// 简单说:PHP函数内的变量,就局限在函数的{}内.

/*

函数调用结束后,申请的独立的"调用空间",就释放掉.

下次,再调用,再申请,函数还得从头初始化.

*/

function t3() {

$age = 19;

$age += 1;

echo $age,'<br />';

}

t3();

t3();

t3();

?>

<?php

// 小小计算器,只计算+ - * /

function calc($num1,$act,$num2) {

$res = null;

switch ($act) {

case '+' :

$res = $num1 + $num2;

break;

case '-':

$res = $num1 - $num2;

break;

case '*':

$res = $num1 * $num2;

break;

case '/':

if($num2 == 0) {

echo '0不能作除数';

break;

}

$res = $num1/$num2;

break;

}

return $res;

}

echo calc(3,'+',2),'<br />';

echo calc(3,'*',7),'<br />';

echo calc(3,'/',0),'<br />';

?>

023-函数的执行权与交回

<?php

// 函数的执行权与执行权的交回.

function t() {

echo 'a<br />';

echo 'b<br />';

echo 'c<br />';

}

echo 'x','<br />';

echo 'z','<br />';

// 运行 x z

// 函数并没有发挥作用,因为没有调用.

/**

函数就像一台加工机,

如豆浆机,如洗衣机等,

豆浆机,洗衣机,人不去调用,会自动运行吗?

同理:函数写好后,并不会自动的发挥作用,得调用时,才能发挥.

**/

echo 'x','<br />';

t(); //

echo 'z','<br />'; // z是等到 t函数运行结束后,才运行的

function t3() {

echo 't3<br />';

}

function t2() {

echo 't2<br />';

t3();

}

function t1() {

t2();

echo 't1','<br />';

}

t1();

/***

总结:

当调用函数的时候,

程序的执行权 进入到 函数内部.

问:

程序的执行权,进入到函数内部之后

什么时候,交出来执行权呢?

***/

?>

<?php

// 函数执行权的交回

function foo() {

echo 'a';

echo 'b';

echo 'c';

echo '<br />';

}

echo 'x','<br />';

foo();

echo 'z','<br />';

// x a b c z

/*

当函数语句运行完之后,执行权就交回.

或者是碰到 return 之后,函数也会交回执行权.

*/

function bar() {

echo 'a';

echo '<br />';

return;

echo 'b';

echo 'c';

}

echo '<hr />';

echo 'x','<br />';

bar();

echo 'z','<br />';

function test() {

return 'hello';

return 'wolrd';

}

echo '哈哈<br />';

echo test();

echo '呵呵<br />';

/***

上面的例子,体现了函数碰到return,就交回执行权.

一个函数如果在return 后面写一些语句-----没有意义的.

***/

?>

024-函数的返回值

<?php

/*

函数 既然比喻成 加工机

入口 -> 原料->传参数

函数体->加工

出口 -->加工结果

// 大学("有为青年")

// 返回: 码农,屌丝....

*/

// 求和函数

function sum($num1,$num2) {

return $num1 + $num2;

}

// 函数调用,返回一个结果的.

// 结果,就是return 的值

$s = sum(3,2); // sum(3,2)返回 5, 5赋给$s

echo $s,'<br />'; // 5

// 但是 我们知道,函数是可以没有"return 语句的",没有return 语句,返回 null

function t() {

$num = 9999;

}

$s = t();

var_dump($s);

// 或者有的时候,函数确实结束,但又没必要返回值,因此,只写一个return

function t2() {

$num = 666;

return;

echo 'aaaa';

}

echo '<hr />';

$s = t2();

var_dump($s);

/****

调用函数的返回值,

即是return 的值.

如果没有return语句,或者 "return;"

则返回值是 NULL

****/

/***

思考: 函数可不可以return回来2个值?

答: 不可能,函数的定义就决定了不能.

从数学上来,一组确定的参数,只能得到一个确定的函数结果.

从程序来说,return 值1; 之后,函数结束,也不可能再return第2个值.

有同学说:用数组

return array(1,2); // 数组是一个值,只不过是一个复合值.

有同学说: return $a,$b;

***/

/*

function t3() {

return 3,9; // 语法错误

}

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: