PHP文件/类名称冲突

blpfk2vs  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(112)

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

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

index.php

Rule class(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'中包含Rule类时,它同时包含了我(script/user.php和class/User.php)。我该如何避免这种情况?

xfb7svmp

xfb7svmp1#

你可以require_once元素相对于它本身,而不是相对于当前工作目录:

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

.但是定义一个自动加载器(使用SPL自动加载器而不是旧的__autoload函数)会更好,它会为你解决这个问题,消除对大多数类的include/require语句的需求。

at0kjp5o

at0kjp5o2#

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

require_once('Class/User.php');

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

gpnt7bae

gpnt7bae3#

如果你想确保在某些文件夹中没有任何类冲突,你可以使用这个工具:https://github.com/shipmonk-rnd/name-collision-detector(可用于CI)
它被PHPStan本身使用,并在几秒钟内分析数千个文件。

$ composer require --dev shipmonk/name-collision-detector
$ vendor/bin/detect-collisions src tests

My\Namespace\User is defined 2 times:
 > /src/Entity/User.php
 > /tests/Samples/User.php

相关问题