我有一个这样的文件结构:
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)。我该如何避免这种情况?
3条答案
按热度按时间xfb7svmp1#
你可以
require_once
元素相对于它本身,而不是相对于当前工作目录:.但是定义一个自动加载器(使用SPL自动加载器而不是旧的
__autoload
函数)会更好,它会为你解决这个问题,消除对大多数类的include/require语句的需求。at0kjp5o2#
我通常包括从我的项目根向上的完整路径,以避免这种情况。为什么不做:
这是更具体的,并绕过了PHP需要做的猜测工作,以弄清楚你的意思。
gpnt7bae3#
如果你想确保在某些文件夹中没有任何类冲突,你可以使用这个工具:https://github.com/shipmonk-rnd/name-collision-detector(可用于CI)
它被PHPStan本身使用,并在几秒钟内分析数千个文件。