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

原创 2001年09月05日 00:29:00

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

jincoo(来自RUTED.COM的爬虫)

    我们知道,在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
?>

    现在,我们不再怕同时包含一个包多次或定义一个函数多次会出现的错误了。这样直接带给我们的好处是,维护我们的程序变得比较轻松了。

VS中重复定义的解决方法

error LNK2005: _DllMain@12 already defined in MSVC方案一、编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决...
  • tiger9991
  • tiger9991
  • 2011年01月18日 20:52
  • 1314

解决PHP中函数重复定义的问题

在本地运行正常的PHP代码,放到空间上就出现 Fatal error: Cannot redeclare  的问题. 查看了一下原来是函数重定义了. 网上说用require_once就可以解决了....
  • ImGoTop
  • ImGoTop
  • 2009年12月08日 06:04
  • 2120

php 避免登录出现循环重定向

我们在写网站的时候经常会出现这种情况,登录的时候,老是说你的页面中包含循环重定向的内容. 下面我就来说明一下几种常见的情况. 在thinkphp中,如果是后台的话,要求必须登录才能进入到主管理界面...
  • lcstrive
  • lcstrive
  • 2014年05月30日 14:53
  • 1814

PHP解决引用路径和重复引用文件已经其中的HTML代码的路径问题的终极解决方案

在对PHP的引用路径问题研究了一段时间之后,我得出了这个解决方案.在网站的根目录下的include文件夹里建立global.php文件global.php 根目录下的include文件夹中建...
  • ImGoTop
  • ImGoTop
  • 2009年12月09日 03:46
  • 1689

php防止重复定义常量 .

defined('YII_DEBUG') or define('YII_DEBUG',true); defined('YII_TRACE_LEVEL') or define('YII_TRACE_L...
  • ufojoan
  • ufojoan
  • 2012年03月15日 17:22
  • 925

在开发中如何才能避免重复造轮子和GET新技能

Google,GitHub,StackOverflow1.不是所有的程序员都不重复造轮子的:有些程序员就是喜欢自己造轮子。高手和菜鸟是不是都适宜这种想法姑且不论。但很多C++团队都喜欢自己写自己的字符...
  • qq_20172379
  • qq_20172379
  • 2017年04月18日 13:55
  • 542

如何处理C++头文件重复定义问题

在设计一个类的时候,通常是将类的定义及类成员函数的声明放到头文件(即.h文件)中,将类中成员函数的实现放到源文件(即.cpp)中。对于 animal类需要animal.h和animal.cpp两个文件...
  • haishengflying
  • haishengflying
  • 2012年07月03日 15:02
  • 1733

两种防止js重复执行的方法

其一: function test(){ console.log(0); } function throttle(fun){ if(fun...
  • fishermanmax
  • fishermanmax
  • 2016年12月27日 22:56
  • 1852

linux下项目开发中防止重复定义和重复包含的方法

我们在网上下载的c或 c++ 源码,当你打开其中的头文件时,如果你是一个心细的计算机爱好者你会发现他们写的头文件都包含在一个条件编译中。比如:#ifndef CLOCK_H#define CLOCK_...
  • zhanglianpin
  • zhanglianpin
  • 2011年06月12日 23:45
  • 3115

php 解决和避免form表单重复提交的方法

在提交表单的时候,可能遇到网速等导致页面突然加载变慢,用户重复地点击提交按钮,将在数据库产生多条数据,导致不可控情况。 比如下面的情况就会导致表单重复提交: 点击提交按钮两次。 点击刷新按钮。 ...
  • ting22055
  • ting22055
  • 2014年11月17日 22:34
  • 4044
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP避免重复申明函数的解决方案
举报原因:
原因补充:

(最多只允许输入30个字)