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; // 语法错误
}
*/
相关文章推荐
- VxWorks_使用ftp服务
- 2016/05/19 thinkphp 3.2.2 文件上传
- 基础总结篇之八:创建及调用自己的ContentProvider
- 基础总结篇之七:ContentProvider之读写短消息
- 基础总结篇之六:ContentProvider之读写联系人
- memocache for CakePHP3.2
- 开启所有PHP错误!无论在任何时候
- PHP知识点学习总结
- PHP不同目录下文件相互引用,相对路径填写。
- PHP的命名空间
- PHP命名空间(Namespace)的使用详解
- vsftpd启动失败
- FTP 字体不识别 svg/woff/woff2字体 404错误
- 实用的 PHP 正则表达式
- php函数isset()和empty()区别
- php实现搜索功能
- thinkphp验证是否登录并跳转
- php返回状态200或者300的写法
- thinkphp在为图片添加png水印不足的处理
- php取整及保留小数位