自定义函数
前言
一般来讲 冗余的代码都是不好的 一而再 再而三地重写代码 不仅浪费时间 从布局结构
角度看也显得粗制滥造 与所有优秀的编程语言一样 PHP采用了很多方法来缓解冗余代
码的问题 其中最常见而且最容易实现的方法就是使用函数(function)
1.标准函数
标准的PHP发行包中有1000多个标准函数 这些标准函数都是系统内置的 不需要用户自己创建而可以直接使用
<?
echo md5('l23456);//MD5函数对字符串进行加密处理
?>
2.自定义函数
PHP内置函数允许和文件进行交互、使用数据库、创建图形 还可以连接其他的服务器
但是 在实际工作中 有许多时候所需要的东西是语言的创建者无法预见到的
声明一个函数可以让我们想内置函数那样使用自己的代码 只要简单地调用这个函数并提供
给它必须的参数 这就意味着 在整个脚本中 都可以调用和多次重复使用相同的函数
创建函数
<?
function functionNameO {
echo'这是一个无参无返回自定义函数';
}
?>
词用函数
<?
functionName();
?>
函数命名
函数名不能和己有的函数名重名
函数名只能包含字母、数字和下划线
函数名不能以数字开头
包含参数无返回的函数调用
<?
function functionArea(Sradius) {
Sarea=Sradius * Sradius* piO;
echo Sarea;
}
functionArea(10);
?>
包含参数有返回的函数调用:使用return()语句可以向函数调用者返回任意确定值 将程序 控制 权返回到调用者的作用域
<?
function functionArea(Sradius) {
return Sradius*Sradius*pi0;
}
echo functionArea(10);
?>
包含默认参数的函数调用:可以为输入参数指定默认值 在没有提供其他值的情况下 就会把这个默认值自动赋给该参数
<?
function functionArea(Sradius=10){
return Sradius * Sradius* pi();
}
echo functionArea0;
?>
返回多个值的函数调用:可以通过返回一个数组然后使用list()函数构造即可
<?
function function Info(Sname, Sage, Sjob) {
SuserInfo=array(Sname, Sage, Sjob);//可以用追加的方式比较常用
return SuserInfo;
}
list(Sname, Sage, Sjob)=functionInfo('张三',13,'学生');
echo Sname.'今年'. Sage.'岁了,目前还是个'. Sjob;
?>
包含引用传参的函数调用:引用传递可以在函数内对参数的修改在函数范围外也能反应
<?
Sprices=50;
Stax=0.5;
function functionPrices(&Sprices,$tax) {
Sprices=Sprices+(Sprices *Stax);
Stanx=Stanx*2;
}
functionPrices(Sprices, Stax);
echo Sprices;
echo'<br/>';
echo Stax;
?>
请注意,函数调用将不区分大小写,所以调用functionname0、FunctionName0或
FUNCTIOINNAME0都是有效的 而且都将返回相同的结果 为了方便 这里都用小写
注意到函数名称和变量名称是不同的 这一点很重要 变量名是区分大小写的 所以SName
和Sname是两个不同的变量 但Namc0和namc0则是同一个函数
理解作用域
变量的作用域可以控制变量在哪里是可见并且可用的 不同的编程语言有不同的变量作用域
规则 PHP具有相当简单的规则:
在函数内部声明的变量作用与是从声明它们的那条语句开始到函数末尾 这叫做函数作用域
这些变量成为局部变量
在函数外部声明的变量作用域是从声明它们的那条语句开始到文件末尾 而不是函数内部
这叫做全局作用域 这些变量成为全局变量
特殊的超级全局变量在函数内外部都是可见的
使用require()和include(并不影响作用域 如果这两个语句用于函数内部 函数作用域适用
如果它不在函数内部 全局作用域适用
关键字“global”可以用来手动指定一个在函数中定义或使用的变量具有全局作用域
通过调用 unset( Svariable_name)可以手动删除变量 如果变量被删除 它就不在参数所指定
的作用域中了
全局变量定义global
<?
$a=5;
function fnaO {
global Sa;
$a=20;
}
fna( );
echo Sa;
?>
可以通过使用超级全局变量SGLOBAL 可以访问或改变全局作用域中的任何变量
<?
SGLOBALS['a']=5;
function fna() {
SGLOBALS['a']=20;
}
fna( );
echo$GLOBALS['a'];
?>
创建自己的函数库
通常将函数集文件存放在library文件夹里 然后通过文件调用即可 文件名约定促成可以
取名为tool. library. php, tool可以根据情况来设定,后面两个照抄!
3.文件包含
为了确保重用性和模块性 最普遍的方式是把功能组建隔离为单独的文件 然后在需要时重
新组装 PHP提供了四种在应用程序中包含文件的语句
include()语句将在其被调用的位置处判断并包含一个文件 包含一个文件与在该语句所在位
置复制该文件的数据具有相同的结果
<?
include'include. php';
?>
include_once( )函数的作用与 include( )相同,不过它会首先验证是否已经包含了该文件 如果
包含了该文件,则不再执行 include_once0
<?
include_once' include. php';
?>
require()在很大程度与include()相同,都是将一个模板文件包含到require()调用所在的位置
<?
require('require. php');
?>
require_once(函数的作用与 require( )相同,不过 require_once( )函数确保文件只包含一次 在
遇到 require_onceO后 后面再试图包含相同的文件时都将被忽略
<?
require_once(' require. php');
?>
require O语句和include O语句几乎是等价的 二者的差异在于 当这两个语句调用失败后 require()将给出一个致命错误,而include()只是给出一个警告
4.魔法常量
PHP实现了一些所谓的魔法常量 他们并不真的是常量 因为这些魔法常量会根据使用的自场合改变值
名称 描述
FILE 当前文件名
LINE 当前行号
FUNCTION 当前函数名
CLASS 当前类名
METHOD 当前方法名