php函数

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;  // 语法错误 

*/ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值