PHP 文件/类名冲突


PHP file/class name collision

>我有一个这样的文件结构:

Class (folder):
 - User.php
 - Rule.php
Scripts (folder):
 - user.php (in lowercase)
 - otherscript.php
index.php
规则类

(类/规则.php):

namespace My'Namespace;
require_once 'Gender.php';
require_once 'User.php';
class Rule
{
...
用户类

(类/用户.php):

namespace My'Namespace;
require_once 'Gender.php';
class User {
...

在规则类中,我使用包含用户类(require_once"用户.php")的"require_once",问题是当我在"otherscript.php中包含 de Rule 类时,它包括我(脚本/用户.php和类/用户.php)。我怎样才能避免这种情况?

您可以相对于自身require_once元素,而不是相对于当前工作目录的任何内容:

   require_once __DIR__.'/Gender.php';
   require_once __DIR__.'/User.php';

。但最好只定义一个自动加载器(使用 SPL 自动加载器而不是旧的 __autoload 函数),它为您处理这个问题,消除了对类的大多数包含/要求语句的需求。

我通常包含从项目根目录向上的完整路径以避免这种情况。为什么不做:

require_once('Class/User.php'); 

这更具体,并且绕过了 PHP 需要做的猜测工作来弄清楚你的意思。