gpt4 book ai didi

PHP 从文件中排除命名空间使用

转载 作者:行者123 更新时间:2023-12-04 16:56:07 25 4
gpt4 key购买 nike

这个问题有点奇怪,真的很难解释,所以我会尽力而为。

基本上,我一直想知道如何在他们自己的文件中实际使用类,然后在其他地方使用该类的命名空间。

举个例子,大多数 PHP 开发人员可能都知道,就像 Laravel 对路由所做的那样,你有一个仅用于路由的 routes.php 文件,顶部没有定义命名空间,例如:use Acme\Router - 但是,该类(class)仍然有效并且不会出现任何错误。这是如何实现的?

示例

我的索引加载在 composer autoloader 中,它也加载了我的应用程序类

<?php

// Used namespace here to actually make it function
use Acme\Application as App;

require_once __DIR__ . '/vendor/autoload.php';

$app = new App;

$app->launch();

启动是为了应用程序一旦启动就应该做的事情,在这里我正在考虑加载路由等(我不确定这是否是处理这个问题的正确方法,但这是我最好的选择。)

类是这样的:
<?php

namespace Acme;

class Application
{
public function __construct()
{

}

public function launch()
{
// Require routes etc.
}
}

我最初的想法是需要这些文件,但我认为 require 是不好的做法。方法中的文件。即便如此,这也将成为它应该需要的一大堆东西。

然而,无论我尝试过什么都没有奏效,我想做的是避免使用 use在我的 routes.php 或其他文件中,以避免出现我想要使用的列表,例如:
use Acme\Database\Handler; use Acme\Router;
因为从长远来看,这可能会变得非常庞大。

我做错了什么,我应该如何解决这个问题?

最佳答案

您可能没有清楚地说明您的问题,因此我从过去遇到的经验不足的开发人员中进行了一些猜测。

我认为我们可以停止讨论“需要文件”,因为您应该使用自动加载来使类、接口(interface)或特征可用。这样做很容易,因为您已经在使用 Composer。查看。

剩下的一点是,由于该列表的大小,您害怕向 Acme\Application 类添加大量“use”语句。对此有两个答案。

首先,有一些关于“use”语句的基本 PHP 知识。您可以使用它来处理显式类,就像您在 use Acme\Application as App; 中所做的那样,但您也可以寻址命名空间前缀,例如 use Acme\Models;并像这样使用它:new Models\User .这既会缩短 use 语句的列表(因为一个语句将涵盖多个 used 的类),也会使代码更具可读性,因为您必须添加更多的命名空间作为上下文( new User; 的描述性不如 new Models\User ) .可读性是一件好事,因为您只需编写一次代码,但此后会多次阅读。并且您不想在每次遇到模棱两可的类名时都发明别名(这是一个强有力的指示,表明您应该添加该上下文,另一方面,总是发明别名可能会开始混淆读者)。

其次,如果你要处理很多类,你就必须处理很多类。除了分离处理所有这些类的任务外,别无他法。然后你仍然需要处理所有这些,但不是在同一个地方。你可能不想做 一切这是在此完成的 launch()方法 每次除非您知道您的应用程序现在在此请求中需要它。

您可能想阅读两个主题:依赖注入(inject)和延迟加载,因为我认为您的问题更针对应用程序架构。

关于PHP 从文件中排除命名空间使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com