0

我的目录结构如下:

  • 测试
    • 脚本
      • 测试类.php
    • 测试子目录
      • 其他子目录
        • 包括1.php
        • 包含2.php
        • 包含测试.php

以下是每个文件的代码:
testClasses.php:

<?php
echo __FILE__."<br/>";

包括1.php:

<?php
include_once("include2.php");
include_once $_SERVER['DOCUMENT_ROOT'] . "/test/scripts/testClasses.php";

incude2.php:

<?php
include_once("/test/scripts/testClasses.php");

包括Test.php:

<?php
include_once($_SERVER['DOCUMENT_ROOT'] . "/TEST/scripts/testClasses.php");
include_once("include1.php");
var_dump(get_included_files());
var_dump(get_include_path());
var_dump(__FILE__);
echo "PHP Version: ".phpversion().PHP_EOL;

运行 PHP 5.4.3 时,我看到以下输出: PHP 5.4.3 output

运行 PHP 7.4.8 时,我看到以下输出: PHP 7.4.8 output

两台服务器都在 Windows 机器上运行。

testClass.php 文件在 PHP 7.4.8 版本中包含两次,因为包含在两个版本上都有不同的大小写,即使它是同一目录中的同一个文件。如果 testClass.php 有一些类声明,则会抛出错误。有没有办法解决这个问题,所以我不必在整个代码中的包含语句中更改大小写?

4

1 回答 1

0

testClass.php可以测试是否定义了常量。如果未定义,请定义它并继续该文件的其余部分:

if (!defined('foo')) {
  define('foo', 'bar'); // Any value will do
  // The rest of testClass.php goes here
}

如果要对多个included 文件执行此操作,则必须提出比“foo”更好的命名约定,以确保符号不会发生冲突。

或者,如果您知道testClass.php已经定义了某个函数(比如说function foo()),则可以对其进行测试:

if (!function_exists('foo')) {
  // The rest of testClass.php goes here
}
于 2020-08-05T18:26:28.747 回答