Php退出功能问题

时间:2009-11-26 04:40:33

标签: php function exit

我注意到PHP中的行为是有道理的,但我不确定如何绕过它。

我有一个很长的脚本,就像这样

<?php 
 if ( file_exists("custom_version_of_this_file.php") ) {
  require_once "custom_version_of_this_file.php";
  exit;
 }
 // a bunch of code etc
 function x () {
  // does something
 }
?>

有趣的是,函数x()将在调用require_once()和exit之前注册脚本,因此,触发退出;语句不会阻止页面中的函数注册。因此,如果我在require_once()文件中有一个函数x(),脚本将崩溃。

由于我正在尝试的场景(也就是说,使用自定义文件,如果它存在而不是原始文件,这可能几乎相同但略有不同),我想在原始文件中使用这些函数(调用)文件未注册,以便它们可能存在于自定义文件中。

任何人都知道如何做到这一点?

由于

2 个答案:

答案 0 :(得分:2)

您可以使用function_exists函数。 http://us.php.net/manual/en/function.function-exists.php

if (!function_exists("x")) {
    function x()
    {
        //function contents
    }
}

答案 1 :(得分:0)

您可以将函数包装在一个类中并对其进行扩展以添加自定义版本。

this_file.php

class DefaultScripts {
    function x () {
        echo "base x";
    }

    function y() {
        echo "base y";
    }
}

if(file_exists('custom_version_of_this_file.php'))
    require_once('custom_version_of_this_file.php');
else
    $scripts = new DefaultScripts();

custom_version_of_this_file.php

class CustomScripts extends DefaultScripts {
    function x () {
        echo "custom x";
    }
}

$scripts = new CustomScripts();

文件存在时的结果

$scripts->x(); // 'custom x'
$scripts->y(); // 'base y'

如果不是

$scripts->x(); // 'base x'
$scripts->y(); // 'base y'