Php退出函数问题

Php退出函数问题,php,function,exit,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 } ?> 有趣的是

我注意到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之前注册到脚本中,从而触发exit;语句不阻止页中的函数注册。因此,如果在require_once()文件中有一个函数x(),脚本将崩溃

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

有人知道如何做到这一点吗


谢谢

您可以使用函数\u exists函数


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

这个文件是.php

自定义\u版本\u的\u this\u file.php

如果文件存在,则返回结果

如果没有呢


我考虑过这一点,但这与我想要实现的恰恰相反。我希望自定义文件中的函数胜过原始文件中的函数——此解决方案的作用正好相反,因为我已经知道它们都存在,所以我最好从自定义文件中删除函数(或重命名它们)。这是一个可行的方案,但实际上是在寻找一种方法来使用自定义文件,而不使用原始文件中的函数。感谢您的回复。您可以查看runkit库()。我从未使用过它,但它确实有runkit_函数(remove)和runkit_函数(redefinite)函数。您可以使用它根据各种包含重新定义方法。看起来有点危险。
if (!function_exists("x")) {
    function x()
    {
        //function contents
    }
}
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();
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'