PHP自定义函数

前面,我们已经使用过不少PHP中定义的内置函数,使用这些函数,我们可以完成很多基础工作,但在软件开发过程中,我们经常会封装一些自己的代码,以完成特定的工作。在PHP中,封装代码主要有两种基本方法,使用自定义函数和创建类(class);本节,我们将介绍如何创建自己的函数,在下一章,将专门介绍与类相关的内容。

首先,在我们需要定义一个函数之前,可以使用function_exists()或is_callable()函数判断函数名是否已存在,参数是一个有效的函数名称,函数存在时返回true,否则返回false。如下面的代码。

var_dump(function_exists('substr')); // 显示 bool(true),即函数名存在

在使用PHP内置函数时,我们可观察到这些函数的命名规则是都使用小写字母,每个单词使用下划线进行连接;为了区分内置函数和自定义函数,我们约定:自定义函数名称不使用下划线,而是采用首字母小写,然后每个单词首字母大写的形式。

创建函数

在PHP中创建函数使用function关键字,一个最简单的函数定义和调用如下面的代码:

function myFirstFunction()  
{  
    echo '我的第一个函数';  
}  
myFirstFunction(); // 调用函数

代码会显示“我的第一个函数”,这就是一个最简单的自定义函数。

参数与返回值

函数中,参数的概念并不难理解,我们使用参数将需要的数据带入到函数中,根据这些数据进行相应的处理后,就可以返回函数的处理结果;如下面的函数,它的功能就是计算圆的周长。

function getPerimeterOfCircle(radius)  
{     returnradius * 2 * M_PI;  
}

echo ‘圆的半径为’, $radius, ‘,其周长为’,getPerimeterOfCircle(10); 函数中,我们使用return语句返回计算结果,这也是函数的返回值。本代码运行会显示“圆的半径为10 ,其周长为62.831853071796”。如果你觉得小位数太多,可以使用round()函数进行四舍五入,如下面的代码。

echo round(getPerimeterOfCircle(10), 2); // 显示 62.83

按引用传递参数

有些时候,我们可能需要在函数内对带入的变量进行实际的修改,而此时,参数的定义就应该添加&符号,其含义为参数按引用传递。如下面的代码。

function addOne(&num)  
{num++;  
}  
num1 = 10;  
addOne(num1);  
echo $num1; // 显示11

如果我们将“&num”修改为“num”,则显示结果就是10;这是因为,在默认情况下,参数带入的是变量的一个副本,对这个副本的操作不会影响变量原有的值。

请注意,如果参数是一个对象,默认情况下就是传递对象的引用,在函数内对象的操作都会实际反映到原对象上,下面的代码演示了这一点,大家先看一下,从下一章开始,我们详细介绍面向对象编程后,这些代码就非常容易理解了。

class CTest  
{  
    public num;  
}  

function addOne(CTestobj)  
{  
    obj->num++;  
}obj = new CTest();  
obj->num = 10;  
addOne(obj);  
echo $obj->num; // 显示11

CTest是一个类,而obj同是一个CTest类的实例(即对象),addOne()函数会对CTest对象中的num成员进行加1操作。

利用参数的按引用传递特性,我们还可以实现一个函数返回多个结果的功能,如下面的代码。

function func(str, &sum)  
{  
    count = strlen(str);  
    num_count = 0;sum = 0;  
    for(i=0;i<count;i++)  
    {  
        if(is_numeric(str{i}))  
        {  
            num_count++;sum+=intval(str{i});  
        }  
    }  
    return num_count;  
}str = 'a5e3k2nki1';  
sum = 0;num_count = func(str,sum);  
echo '字符串包含', num_count, '个数字,它们的和是',sum;

代码运行结果显示“字符串包含 4 个数字,它们的和是 11”。

我们定义的func()函数,其返回值是字符串中的数字的个数,我们同时通过第二个参数$sum返回了这些数字的和。

可选参数

在定义函数时,如果我们给参数设置了默认值,即它就成为一个可选参数,在调用函数时就可以不指定这个参数;可选参数可以有多个,但它们必须放在参数列表的最后,如下面的代码。

function printInteger(min,max, step=1)  
{     for(i=min;i<=max;i+=step)     {         echoi,',';  
    }  
}  

printInteger(1,10);  // 显示1,2,3,4,5,6,7,8,9,10,  
echo '<br>';  
printInteger(1,10,2);  // 显示1,3,5,7,9,

关于mixed类型

查看PHP文档时,我们可以看到很多函数或方法返回的类型是混合类型,即mixed;这说明,这些函数和方法返回的类型可以不止一种,比如一个函数需要返回远程资源(如string类型),但是,但远程连接错误时,就可以返回false值来通知调用者。

在我们定义函数时,并不需要指定函数的返回值,但是,我们在项目中还是应该对函数的返回值类型做出约定,以便正确调用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程