php函数
php函数包括三种类型,内置函数,自定义函数,变量函数。
内置函数,即php内部提供的原生的,预定义好的,直接可调用使用的函数。
自定义函数,程序员自定义的函数,定义声明后才可使用。
变量函数,变量函数类似可变变量,变量函数的函数名为一个变量。(有点和js函数一样的感觉)
1.自定义函数
自定义函数格式:
function functionName($param1,$param2,$param3,...$paramn=defaultValue){
函数体
return 返回值;
}
其中 function ,是用来定义自定义函数的关键字,不区分大小写。functionName ,是自定义的函数名。$param是定义函数的形参。defaultValue,函数参数的默认值。 函数体,是函数功能的实现,在函数被调用时执行的语句块。return 即为返回值,其返回值可以是任意一种数据类型,函数可以没有返回值,这个需要自定义的功能来看。
2.自定义函数的声明和调用
2.1 同文件调用自定义函数
在同文件中调用已经定义好的函数,直接使用函数名调用即可。
无参无返回值自定义函数示例 sayHello():
//定义函数sayHello,它的功能是输出一句hello
function sayHello(){
echo "hello"."\n";// hello
}
// 在同文件中调用直接使用函数名调用即可
sayHello();
有参有返回值自定义函数示例 sum():
function sum($a,$b){
return floatval($a+$b);//因为函数体比较简单,直接使用return关键字返回计算结果即可
}
$end = sum(2,3);
echo $end;// 5
2.2 跨文件调用自定义函数
通常,我们定义一个某种特定的功能函数,会被整个php程序频繁的调用,而且很多情况是跨文件调用。
跨文件调用,需要了解几个php语言结构(提供php文件间的相互引用功能,提高代码的重用性)。
include ,require 语言结构
include 语言结构的语法格式 : mixed include ( string resource)
include 语言结构的功能 : include语言结构将一个资源文件 resource 载入到当前的php程序中, resource是一个资源文件的文件名。若找不到resource对应的文件则返回false,找到resource文件且其没有返回值时,include返回整数1,若resource有返回值,则include返回其返回值。
tip:(资源文件可以是php本地服务器的图片,html,php页面等,也可以是互联网上的资源(使用互联网上的资源,需要将php.ini配置文件中的allow_url_include设置为on,表示开启允许载入互联网资源)。
)
require 语言结构的语法格式 : mixed require ( string resource)
require 语言结构的功能 : 与上面的include基本一致,唯一的区别就是,include语言结构载入文件,如果出现错误后会提示错误信息然后继续执行;而require语言结构载入文件,如果出现错误后会提示错误信息然后停止执行。
跨文件使用自定义函数例子:
先写一个untils.php,用来被其他php文件调用:
<?php
// 这里只为了演示跨文件调用功能,函数写的很简陋
function sum($a,$b){
return intval($a+$b);
}
function sub($a,$b){
return intval($a-$b);
}
function mul($a,$b){
return intval($a*$b);
}
function div($a,$b){
return intval($a/$b);
}
?>
创建一个 main1.php 并且 使用 include 语言结构将 untils.php 载入:
// 使用include语言结构,引入刚刚写的自定义工具函数php文件 untils.php
include("untils.php");
echo sum(1,2)."\n";//3
echo sub(1,1)."\n";//0
echo mul(1,2)."\n";//2
echo div(2,2)."\n";//1
// 故意设置一个错误的资源文件,查看输出
include "untils1.php";// Warning: include(untils1.php): failed to open stream: No such file or directory
echo "include语言结构载入文件错误时,会会提示错误信息,并且继续执行剩下的代码~~~~";
创建一个 main2.php 并且 使用 require 语言结构将 untils.php 载入:
// 使用require语言结构,引入刚刚写的自定义工具函数php文件 untils.php
require("untils.php");
echo sum(1,2)."\n";//3
echo sub(1,1)."\n";//0
echo mul(1,2)."\n";//2
echo div(2,2)."\n";//1
// 故意设置一个错误的资源文件,查看输出
require "untils1.php";// Warning: include(untils1.php): failed to open stream: No such file or directory
// 下面的这句输出不会显示 原因就是require的特点,遇到错误信息时,反馈错误信息后便停止运行
echo "require 语言结构载入文件错误时,会提示错误信息,然后终止程序的运行~~~~";
include_once ,require_once 语言结构
include_once 和 require_once 这两种语言结构可以说是对上面的include和require的完善和补充。
因为随着程序规模的扩大,同一程序多次使用include或require来载入同一个资源文件,这样会导致资源文件混乱的问题,为了解决这个问题,便提出了 include_once ,require_once 语言结构,确保同一个资源文件只被引用一次。
使用方法和上面的 include ,require 语言结构基本一样就不过多赘述。
2.3 自定义函数的参数赋值
自定义函数参数的赋值,也分为传值赋值和传地址赋值(与变量赋值和数组赋值一样)。
传值赋值,不会改变原有的值内容;而传地址赋值,会改变原有的值内容。
如下代码:
传值赋值:
$a = 3;
// 使用传值赋值,在不重新赋值的情况下,变量本身的值内容不会发生改变
function add1($a){
$a = intval($a+1);// 局部变量只在函数体内有效
return $a;
}
echo add1($a)."\n";// 4
echo $a; //3
传地址赋值:
$a = 3;
// 使用传地址赋值,原有的变量的值内容发生改变
function add2(&$a){
$a +=1;
return $a;
}
echo add2($a)."\n";// 4
echo $a; //4
3.变量的作用域 及 生命周期
变量的作用域包括,全局变量和局部变量。(变量的作用域,取决于变量在php程序中的位置)。
- 1.在函数内定义的变量(包括函数的参数)为局部变量,局部变量在调用函数结束后自动被回收释放。
- 2.函数定义外的变量为全局变量,在当前的pphp程序中都可以访问到,当整个当前php程序被执行完毕后才会回收释放。
变量的生命周期也其实就是它的作用域,函数体内变量的生命周期就是从函数开始执行到函数执行完毕,而全局变量的生命周期就是当前php程序执行开始到执行完毕。
4.global 关键字 和 static 关键字
使用global关键字会将变量的作用域变为全局变量
global关键字用法的注意事项:
- 1.不能使用global定义函数的参数
- 2.在函数内使用global定义全局变量的同时,不能使用赋值语句给该变量赋值
- 3.global可以一次性的定义多个全局变量。(
global $a,$b,$c;
) - 4.在函数内使用global语句定义全局变量时,如程序已经存在该全局变量,则拿来直接使用,如果不存在则创建。
- 5.经过global定义的全局变量,php会将该变量的定义放到
$_GLOBALS
数组中,数组的键该全局变量的变量名,数组的值为该全局变量的变量值。
static 关键字 可以将函数体内的变量从这次调用一直存活到下次调用。
static 关键字用法的注意事项:
- 1.static主要用来修饰函数体内的变量,不能使用static定义函数的参数
- 2.静态变量旨在php程序的当前执行有效,如果重新启动了程序,则一切又将重新开始。
- 3.经static修饰的变量一般要进行初始化。
- 4.static可以一次性的定义多个静态全局变量。(
static $a,$b,$c;
)
5.return exit die
5.1 return
return是语言结构而不是函数。
如果一个函数中包含return 语句,当调用此函数时,函数的执行只会进行到return这一步,return之后的语句都不会执行,并将return的参数作为函数的值返回。
如果在全局范围中调用,则当前php文件中止运行。如果当前php文件是被 include 的或者 require 的,则控制交回调用文件。此外,如果当前php文件是被 include 的,则 return 的值会被当作 include 调用的返回值,相应的在主php文件中定义一个变量进行返回值的接收。
如果在主php文件中调用 return,则php程序中止运行。
5.2 exit()
输出一个消息并且退出当前脚本。
语法格式: void exit ([ string $status ] )
, void exit ( int $status )
。
如果 status 是一个字符串,在退出之前该函数会打印 status 。
如果 status 是一个 integer,该值会作为退出状态码,并且不会被打印输出。 退出状态码应该在范围0至254,不应使用被PHP保留的退出状态码255。 状态码0用于成功中止程序。
Note: PHP >= 4.2.0 当 status 是一个 integer,不会打印输出。
5.3 die()
关于die()的使用,官方文档给的是结构与die()一致。
5.4 三者比较
die与exit
手册上标明 "die — Equivalent to exit().This language construct is equivalent to exit().”
。
但在实际代码过程中可以存在一定的选择差别,例如这样:涉及到提前终止程序/脚本执行的情况,使用exit();当程序出错,为了停止执行并显示提示信息时,使用die()。
return与exit(或die)
如果在全局范围内调用exit()或return,它们产生影响是一样,即中止当前脚本运行,在其他范围内调用两者,return始终会返回值,不管当前文件被include/require。