### PHP 避免重复申明函数的解决方案

我们知道，在 PHP 中不能使用相同的函数名定义函数两次，如果这样，程序执行的时候就会出错。
而我们会把一些常用的自定义函数提取出来，放到一个 Include 文件中，然后别的文件就可以通过 Include 或 require 来调用这些函数，下面是一个例子：
<?php
// File name test1.inc.php
function fun1()
{
// do any fun1
}
function fun2()
{
// do any fun2
}
?>
<?
// File name test2.inc.php
require("test1.inc.php");
function fun1()
{
// do any fun1
}
function fun3()
{
// do any fun3
}
?>
<?
// File name test.php
//可能需要包含其他的文件
require("test1.inc.php");
require("test2.inc.php");
// do any test
?>
在 test1.inc.php 和 test2.inc.php 中同时定义了 fun1 这个函数，我虽然知道这两个函数实现的功能完全相同，但是我并不确定，或者说我不想明确的知道，一个函数是不是在某个“包”(INCLUDE)中定义了，另外的一个问题是，我们不能包含一个包两次，但是我并不想在这里花过多的时间进行检查，上面的例子，执行 test.php 会产生很多错误。
在 C 语言中，提供了预定义功能可以解决这个问题：
#ifndef __fun1__
#define __fun1__
// do any thing
#endif
PHP 并不提供这样的机制，但是我们可以利用 PHP 的灵活性，实现和 C 语言的预定一同样的功能，下面举例如下：
<?php
// File name test1.inc.php
if ( !isset(____fun1_def____) )
{
____fun1_def____ = true;
function fun1()
{
// do any fun1
}
}
if ( !isset(____fun2_def____) )
{
____fun2_def____ = true;
function fun2()
{
// do any fun2
}
}
?>
<?
// File name test2.inc.php
require("test1.inc.php");
if ( !isset(____fun1_def____) )
{
____fun1_def____ = true;
function fun1()
{
// do any fun1
}
}
if ( !isset(____fun3_def____) )
{
____fun3_def____ = true;
function fun3()
{
// do any fun3
}
}
?>
<?
// File name test.php
//可能需要包含其他的文件
require("test1.inc.php");
require("test2.inc.php");
// do any test
?>
现在，我们不再怕同时包含一个包多次或定义一个函数多次会出现的错误了。这样直接带给我们的好处是，维护我们的程序变得比较轻松了。