【发布时间】:2019-10-04 19:12:44
【问题描述】:
发生了一些奇怪的事情。我是 php 编程的新手。 我正在尝试使用 FirePHP,但我的问题实际上与该工具没有直接关系。
您将在下面看到的函数fb 是FirePHP 的一部分。我的入口点是Main.php。第一个fb 调用执行时没有任何问题,但第二个调用(参见ExperController.php)在调用Main.php 中的$ec->exper(); 时触发,会导致致命错误:
致命错误:未捕获的错误:第 12 行的 path-to-wp-directory\wp-content\mu-plugins\typerocket\app\Controllers\ExperController.php 中找不到类 'App\Controllers\FirePHP'
为什么运行时引擎在该命名空间 (App\Controllers) 下寻找 FirePHP 类?为什么在第一次fb 通话中这不是一个问题? FirePHP 文件中根本没有定义任何命名空间。我最后一个但至关重要的问题是,如何在不接触 3rd 方文件的情况下解决这个问题? This answer 不是我的案例的解决方案,因为我没有在我的代码中引用/调用提到的类!
注意:通过自动加载器(由 composer 提供)包含 FirePHP。
Main.php:
<?php
fb('Hello World!', FirePHP::INFO);
$req = new \TypeRocket\Http\Request();
$res = new \TypeRocket\Http\Response();
$ec = new \App\Controllers\ExperController($req, $res);
$ec->exper();
ExperController.php:
<?php
namespace App\Controllers;
use TypeRocket\Controllers\Controller;
class ExperController extends Controller
{
public function exper() {
fb('Hello World!', FirePHP::INFO);
}
}
【问题讨论】:
-
PHP 在您在
ExperController.php开头定义的当前命名空间下寻找FirePHP。因此,您需要帮助 PHP,并且需要从其他命名空间定义要使用的类。您需要为FirePHP添加另一个使用行,例如use TypeRocket\Controllers\Controller;。我建议使用一些 PHP IDE 来帮助您参考并告诉您是否缺少一些参考。如果您还没有使用,请遵循 @user122293 的建议并使用 composer。 :) -
但如前所述,FirePHP 没有在其文件/类中定义任何命名空间
标签: php namespaces