Php退出函数问题
我注意到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
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'