【问题标题】:PHP file/class name collisionPHP 文件/类名冲突
【发布时间】:2012-06-19 15:45:21
【问题描述】:

我有这样的文件结构:

Class (folder):
 - User.php
 - Rule.php
Scripts (folder):
 - user.php (in lowercase)
 - otherscript.php

index.php

规则类(Class/Rule.php):

namespace My\Namespace;
require_once 'Gender.php';
require_once 'User.php';

class Rule
{
...

用户类(Class/User.php):

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

在 Rule 类中,我使用了包含 User 类(require_once 'User.php')的 'require_once',问题是当我在 'otherscript.php' 中包含 de Rule 类时,它同时包含了我(script/ user.php 和 class/User.php)。我怎样才能避免这种情况?

【问题讨论】:

    标签: php class namespaces


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢@Wrikken 我会尝试使用 DIR 然后我将学习如何使用 SPL 自动加载器。
    【解决方案2】:

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

    require_once('Class/User.php'); 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      相关资源
      最近更新 更多