代码改变世界

第五章 代码重用与函数编写(1)

2016-08-02 11:58  yojiaku  阅读(268)  评论(0编辑  收藏  举报

****************************** 第五章 代码重用与函数编写 *********************************

代码重用的好处;使用require()和include()函数;函数介绍;定义函数;使用参数;理解作用域;

返回值;参数的引用调用和值调用;实现递归;使用命名空间

*************** 5.1 代码重用的好处

1.成本低;2.可靠性;3.一致性:系统的外部接口是一致的,其中包括用户接口和系统的外部接口。

*************** 5.2 使用require()和include()函数

使用一条require()或include()语句,可以将一个文件载入到PHP脚本中,这个文件可以包含任何希望在一个脚本中输入的内容,

其中包括PHP语句、文本、HTML标记、PHP函数或PHP类。

(同C语言的#include一样)

两者区别:函数失败后,require()函数将给出一个致命错误,而include()只是给一个警告。

变体函数:require_once()和include_once(),确保包含的文件只能被引入一次。通常用于页眉和脚注(header and footer)。

*************** 5.2.1 文件扩展名和require()函数

现在有一个reusable.php文件:

<?php
echo "Here is a very simple PHP statement.<br />";
?>

 

还有一个main.php文件:

<?php
echo "This is the main file.<br />";
require('reusable.php');
echo "The script will end now.<br />";
?>

 

我们注意到在main.php文件中使用了require()函数引用了reusable.php文件,那么打印结果为:

This is the main file.
Here is a very simple PHP statement.
The script will end now.

注意:当使用require()语句时,必须注意处理文件扩展名和PHP标记的不同方式。

 可以使用任意扩展名来命名包含文件,但要尽量遵循一个规则,将扩展名命名为.inc或.php。
 
 .inc文件(include file):实际上,文件的后缀对于文件包含无所谓,一般使用inc为后缀,这样能体现该文件的作用。

 
*************** 5.2.2 使用require()制作Web站点的模板

如果一个网站有几十上百个网页,而且他们风格一致,只是有一些细微的改变,相对于剪切粘贴数十个、数百个甚至数千个页面,直接重用各个页面中通用的

HTML代码部分是一个更好的办法。

例子:home.html —— TLA咨询公司主页的HTML脚本

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TLA Consulting Pty Ltd</title>
    <style type="text/css">
        h1{
            color:white;
            font-size: 24pt;
            text-align: center;
            font-family: Arial,sans-serif;
        }
        .menu{
            color: white  ;
            font-size: 12pt;
            text-align: center;
            font-family: Arial,sans-serif;
            font-weight: bold;
        }
        td{
            background: black;
        }
        p{
            color: black;
            font-size: 12pt;
            text-align: justify;
            font-family: Arial,sans-serif;
            font-weight: bold;
        }
        a:link,a:visited,a:active{
            color: white;
        }
    </style>
</head>
<body>
<!-- page header -->
<table width="100%" cellpadding="12" cellspacing="0" border="0">
    <tr bgcolor="black">
        <td align="left"><img src="logo.gif" alt="TLA logo" height=70 width=70></td>
        <td>
            <h1>TLA Consulting</h1>
        </td>
        <td align="right"><img src="logo.gif" alt="TLA logo" height=70 width=70></td>
    </tr>
</table>

<!-- menu -->
<table width="100%" bgcolor="white" cellpadding="4" cellspacing="4">
    <tr >
        <td width="25%">
            <img src="s-logo.gif" alt="" height=20 width=20> <span class="menu">Home</span></td>
        <td width="25%">
            <img src="s-logo.gif" alt="" height=20 width=20> <span class="menu">Contact</span></td>
        <td width="25%">
            <img src="s-logo.gif" alt="" height=20 width=20> <span class="menu">Services</span></td>
        <td width="25%">
            <img src="s-logo.gif" alt="" height=20 width=20> <span class="menu">Site Map</span></td>
    </tr>
</table>

<!-- page content -->
<p>Welcome to the home of TLA Consulting.
    Please take some time to get to know us.</p>
<p>We specialize in serving your business needs
    and hope to hear from you soon.</p>

<!-- page footer -->
<table width="100%" bgcolor="black" cellpadding="12" border="0">
    <tr>
        <td>
            <p class="foot">&copy; TLA Consulting Pty Ltd.</p>
            <p class="foot">Please see our <a href="legal.php">legal information page</a></p>
        </td>
    </tr>
</table>
</body>
</html>

 

 

我们可以看到这个文件由许多不同的代码部分组成:

HTMl标题包含了在该页面中用到的级联风格样式单(CSS)中的样式定义==>

<head>
    <meta charset="UTF-8">
    <title>TLA Consulting Pty Ltd</title>
    <style type="text/css">
        h1{
            color:white;
            font-size: 24pt;
            text-align: center;
            font-family: Arial,sans-serif;
        }
        .menu{
            color: white  ;
            font-size: 12pt;
            text-align: center;
            font-family: Arial,sans-serif;
            font-weight: bold;
        }
        td{
            background: black;
        }
        p{
            color: black;
            font-size: 12pt;
            text-align: justify;
            font-family: Arial,sans-serif;
            font-weight: bold;
        }
        a:link,a:visited,a:active{
            color: white;
        }
    </style>
</head>

 

标有“page header”部分显示了公司的名称(TLA Consulting)和徽标(logo.gif);

标有“menu”部分创建了页面的导航条;

标有“page content”部分是页面中的文本;

然后是脚注。

我们将这个文件分割,然后给这些部分分别命名为header.php, home.php, footer.php。

这样,文件header.php 和 footer.php中都包含有在其他页面中可以重用的代码。

像下面这样:

1.我们用home.php代替home.html,它包含页面内容和两个require语句:

home.php —— TLA公司主页的php脚本

<?php
require('header.inc');
?>
<!-- page content -->
<p>Welcome to the home of TLA Consulting.
Please take some time to get to know us.</p>
<p>We specialize in serving your business needs and hope to hear from you soon.</p>
<?php
require('footer.inc');
?>

 

2.文件header.inc包含了页面使用的级联风格样式单定义以及公司名称和导航

header.inc —— 所有TLA网站的页面可重复使用的页眉

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>TLA Consulting Pty Ltd</title>
    <style type="text/css">
        h1{
            color:white;
            font-size: 24pt;
            text-align: center;
            font-family: Arial,sans-serif;
        }
        .menu{
            color: white  ;
            font-size: 12pt;
            text-align: center;
            font-family: Arial,sans-serif;
            font-weight: bold;
        }
        td{
            background: black;
        }
        p{
            color: black;
            font-size: 12pt;
            text-align: justify;
            font-family: Arial,sans-serif;
            font-weight: bold;
        }
        a:link,a:visited,a:active{
            color: white;
        }
    </style>
</head>
<body>
<!-- page header -->
<table width="100%" cellpadding="12" cellspacing="0" border="0">
    <tr bgcolor="black">
        <td align="left"><img src="logo.gif" alt="TLA logo" height=70 width=70></td>
        <td>
            <h1>TLA Consulting</h1>
        </td>
        <td align="right"><img src="logo.gif" alt="TLA logo" height=70 width=70></td>
    </tr>
</table>

<!-- menu -->
<table width="100%" bgcolor="white" cellpadding="4" cellspacing="4">
    <tr >
        <td width="25%">
            <img src="s-logo.gif" alt="" height=20 width=20> <span class="menu">Home</span></td>
        <td width="25%">
            <img src="s-logo.gif" alt="" height=20 width=20> <span class="menu">Contact</span></td>
        <td width="25%">
            <img src="s-logo.gif" alt="" height=20 width=20> <span class="menu">Services</span></td>
        <td width="25%">
            <img src="s-logo.gif" alt="" height=20 width=20> <span class="menu">Site Map</span></td>
    </tr>
</table>

 

我们注意到,这里相当于从home.html切了一部分

3.footer.inc包含页面底部脚注处显示的表格

footer.inc —— 所有TLA网站的页面可重复使用的脚注

<!-- page footer -->
<table width="100%" bgcolor="black" cellpadding="12" border="0">
    <tr>
        <td>
            <p class="foot">&copy; TLA Consulting Pty Ltd.</p>
            <p class="foot">Please see our <a href="legal.php">legal information page</a></p>
        </td>
    </tr>
</table>
</body>
</html>

 

4.运行home.php文件,效果与home.html一样

运行结果:

 

使用上述方法很容易就使网站拥有统一的风格。

(注意:书上的文件后缀前后不同,引用的文件要与目录中存在的文件一致)

最重要的是,用这种方法,我们也很容易修改脚注和页眉(只需要进行一次修改)。


******************** 5.2.3 使用auto_prepend_file 和 auto_append_file

在配置文件php.ini中有两个选项:auto_prepend_file , auto_append_file,通过这两个选项来设置页眉和脚注,可以

保证它们在每个页面的前后被载入,如果载入的文件不存在,则产生警告。

如果使用了这些指令,就不需要输入include()语句,但页眉和脚注不再是页面的可选内容。

(一般不使用这种方法)