首页 > 解决方案 > 使用未按预期工作的外部类

问题描述

我有一个问题,我试图从另一个文件中的类调用方法。我已经完成了:use Tests\Feature\testName当我尝试在我的函数中使用它时,这显示了该类,甚至显示了我试图在 testName 文件中调用的函数。但是,当我尝试只运行 PHP 文件时,我得到了这个错误:

Uncaught Error: Class 'Tests\Feature\testName' not found in path\to\file

我对它为什么不起作用感到有些困惑,如果有人能解释为什么会这样,我将不胜感激!:)

标签: php

解决方案


在 PHP 中,类不包含在简单地使用use指令中。您需要通过包含类所在的文件来加载它们。

有什么用use?(哈哈)

use让您不使用您正在使用的类的 FQDN,请参见下面的代码:

use \A\Long\Namespace\Foo;
$foo = new Foo();
// Without use, you would have needed : $foo = new \A\Long\Namespace\Foo();

无聊的方式

这就是 PHP 开发人员多年前这样做的方式,它只是明确要求该文件:

// Foo.php
class Foo {}

// index.php
require_once( __DIR__ . '/Foo.php');
$foo = new Foo();

正常的方式

现在,人们使用自动加载具有模式的类的代码,您可以使用Composer(其中,不会在此处进行基于意见的讨论),或者,如果您的项目很小并且您不想使用它,因为你对它没有信心,手动加载你的类。例如,将所有类放在一个class文件夹中,并用类的相同名称命名文件,然后您可以使用以下代码:

spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});

加载您需要的所有类(您可能希望将其放在 PHP 代码的开头)。


推荐阅读