我注意到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(),脚本将崩溃。
由于我正在尝试的场景(也就是说,使用自定义文件,如果它存在而不是原始文件,这可能几乎相同但略有不同),我想在原始文件中使用这些函数(调用)文件未注册,以便它们可能存在于自定义文件中。
任何人都知道如何做到这一点?
由于
答案 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'