1. Chapter9 函数与程序模块化

1.1. 什么是函数

函数是一个具有固定功能的程序模块,每个函数具有它自己的名字和相应的功能。例如我们在一开始就使用的echo,它的功能是向浏览器输出一个字符串。

从函数的创建者来划分,函数分为系统定义的函数和开发者创建的函数。从功能上来划分,又可以分为数学函数、数组处理函数、字符串处理函数等等。函数可以实现的功能是不可限量的,任何一种功能或者是任何一段程序,都可以被装进一个函数中。我们将这种“装入”的过程叫做封装

下面我们就从创建一个函数开始,来介绍函数这个强大的功能。

1.2. 函数的声明和调用

函数和变量一样,也要有自己的名字。函数的起名规则与变量相同,通常一个函数的名字表示了这个函数实现的功能。声明一个函数的一般形式如下所示:

function fun($arg1,$arg2,...){
    //do something
    return $returnValue;
}

函数使用function关键字声明,后面是函数名字。括号中是函数的参数,参数不是必须的。紧接着下面是函数体,函数体由多条语句、控制结构等程序组成。return指示了程序的返回值。一个函数不一定要有返回值,但程序一定要执行了一定的功能,否则这个函数没有任何意义。

例如下面一段代码,定义了一个函数,这个函数完成了四则运算的功能。

//fun1.php
function calc($a,$b,$c){
    switch($b){
        case '+' : return $a + $c;
        case '-' : return $a - $c;
        case '*' : return $a * $c;
        case '/' : return $a / $c;
        default : return '不支持+-*/之外的运算';
    }
}

再编写一段程序,来调用这个函数。

//fun1.php
$a = $_GET['a'];
$b = $_GET['b'];
$c = $_GET['c'];
if($a && $b && $c){
    echo '开始运算了!<br/>';
    echo '运算结果是:<br/>';
    echo calc($a,$b,$c);
    echo '<br/>';
}else{
    echo '运算数或运算符不够!<br/>';
}

1.3. 参数和返回值

参数和返回值是函数的两大要素。一个函数存在的意义,即“谁参加了计算”和“函数做了什么事情”。参数,即参加计算的成员。参数在函数定义时,在函数名后边的括号中已经按顺序排列好,并且中间使用逗号隔开。调用函数的时候,需要根据函数定义时候的顺序依次传入参数,这个动作叫做“传参”。而对于返回值的解释应该是,类比数学中的函数,“返回值”对应的概念就应该是函数值,即函数执行完毕应该得到什么。在函数体中,使用return标识返回值。函数在运行到return语句中停止并将返回值传给上层调用函数的位置,函数流程也跟着跳转过去。所有在return后面的语句都不会被执行。

例如上面例子中的函数,函数名是calc,它的作用是将参数1和参数3进行参数2的运算,将计算的结果作为返回值返回。

关于函数、参数、返回值等概念,可以用如下流程图来解释。

1.4. 函数库与程序模块化

PHP为开发者提供了一系列的系统定义函数,这大大提升了PHP的功能性。但是同时这既是PHP的优点又是PHP的缺点,由于系统函数的数量过于庞大,导致开发者往往记不得全部的能用得到的函数。有的时候想要实现的功能是已经存在的系统函数,却因为不知情而去自己重写相同的功能。

开发的过程中离不开函数,函数使程序模块化,可以提升程序的复用性。但是进行功能封装时,应该避免将功能过度细分。一个函数保持具有其独立的功能即可。

作为无私且伟大的程序员,将自己的代码分享给别人是大家都具有的美德。分享代码时,通常分享的是“功能”。即将你解决了某种问题的步骤或者是算法封装在一个函数中,将函数写在一个php文件中,将这个php文件分享给别人。当别人拿到这个文件的时候,有很多种方式可以在自己的代码中使用这个文件。

1.4.1. 直接复制代码

拿到别人的代码后,直接打开文件,将需要的功能复制进自己的代码中,稍加改进即可直接使用。这种方式最简单,但是复用性不高。

试想,如果你现在需要解决A问题,然后在网上下载到了解决A问题的代码。这时候你打开代码,复制粘贴到了自己的代码中。当你写下一段代码的时候,又遇见了A问题,这时候如果还需要使用这段别人的代码,就还需要再复制一次。这种使用方式会让代码变得很冗余。

就算不是使用别人的代码,在自己编写代码的时候,也应该尽可能地将单独的功能封装起来,作为函数去调用。

1.4.2. include

include()可以将另一个php文件包含进当前的php文件中,并且将目标文件的代码放在include的位置上。

如果要避免同一个文件被重复包含,可以使用include_once()函数。

1.4.3. require

require()也可以实现将代码包含进来的功能,同样也可以使用require_once()来避免重复包含同一个文件的问题。但是requireinclude有所区别。

require会不加判断直接将代码复制粘贴过来,而include则会按照代码的执行顺序决定是否要包含。例如下面两段代码:

if($a > 1){
    include_once('phpinfo.php');
}
if($b == 0){
    require_oncce('pnpinfo.php');    
}

第一段代码在if判断为真的情况下,才会将phpinfo.php中的代码包含进当前代码中,如果判断不为真,则不会执行任何包含的程序。

而第二段代码直接等价于下面这段代码:

if($b == 0){
    phpinfo();
}
这本书是xt写的/上次修改: 2019-04-17 14:57:44

results matching ""

    No results matching ""