首页 > 解决方案 > php 在命名空间内使用所有带有“use”的类| 不是“包括”而是“使用”' | 香草PHP

问题描述

我有一个类,它使用 Controllers 文件夹中的每个类。为了能够使用它们,我需要做

use <namespace>\<class>;

但是,如果您有大量的类并且占用大量空间,那么这会变得重复。

我知道在 c# 中,您可以在特定文件夹中包含所有类,例如

using Controllers

因此,所有类都将与“控制器”一起加载,并且不需要为这个“控制器”命名空间内的 10 个不同的类重复 10 次。

但是如何用 PHP 做到这一点?

我尝试循环 glob

foreach (glob("Controllers/*.php") as $filename) {
   use $filename;
}

但是使用 'use' 会引发错误,这是意料之中的,因为这是一种错误的使用方式。Al-tho 使用 'include' 切换 'use' 有效,但随后找不到这样的 $filename。我需要使用“使用”而不是“包含”

这是否可能,或者我只是在浪费时间尝试在不使用任何 3rd 方库或框架(vanilla php)的情况下执行此操作

标签: php

解决方案


您可以在 PHP 中使用命名空间:

假设我有

App\Namespace1\Foo
App\Namespace1\Bar
App\Namespace2\Baz
namespace App\Namespace2;

use App\Namespace1;

class Baz
{
  public function __construct(Namespace1\Foo $foo)
  {
    new Namespace1\Bar($foo);
  }
}

推荐阅读