0

我注意到 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(),脚本就会崩溃。

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

有谁知道如何做到这一点?

谢谢

4

2 回答 2

2

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

if (!function_exists("x")) {
    function x()
    {
        //function contents
    }
}
于 2009-11-26T04:42:57.803 回答
0

You can wrap your functions in a class and extend it to add custom versions.

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();

Results if file exists

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

and if it doesn't

$scripts->x(); // 'base x'
$scripts->y(); // 'base y'
于 2010-12-02T03:30:51.067 回答