PHP Class 使用命名空间会导致我的代码出现问题,因为它不使用命名空间。为什么?

PHP Class using namespaces causes problems with my code that doesn't use namespaces. Why?

我正在尝试使用一个名为 tcpdf-extension 的 php 库。该库使用 namespaces'use' 命令。我的其余代码没有。我是 namespaces 的新手,不明白如何使用它们。

如果我包含该库,我会遇到 php 无法找到其他 included/required 文件的问题。例如:'PHP Fatal error: require_once(): Failed opening required <filepath>(include_path='.;C:\php\pear') in <filepath> on line 29' 另一个问题是我以前工作的一些网站页面只是挂起而没有任何错误消息。如果我删除库的包含,一切都会恢复正常。

如果我在与其余代码不同的页面中使用该库,则没有问题,但一旦我将其包含在任何其他页面中,它就会失败。

为什么会发生这种情况,我该如何解决?

更新:包含库的示例:

require_once ('tcpdf/Extension/Helper.php');
require_once ('tcpdf/Extension/Table/Table.php');
require_once ('tcpdf/Extension/Table/Cell.php');
require_once ('tcpdf/Extension/Table/Row.php');
require_once ('tcpdf/Extension/Table/TableConverter.php');
require_once ('tcpdf\Extension\Attribute\AbstractAttribute.php');
require_once ('tcpdf\Extension\Attribute\BackgroundAttribute.php');
require_once ('tcpdf\Extension\Attribute\BackgroundFormatterOptions.php');

如果将其注释掉,问题就会消失,但我需要使用这个库。

这是来自 Table.php 的部分:

<?php
namespace Tcpdf\Extension\Table;
class Table{
...

这是来自 Cell.php 的部分:

namespace Tcpdf\Extension\Table;

use Tcpdf\Extension\Attribute\BackgroundAttribute;

class Cell
{
...

我的猜测是 use and/or 命名空间命令与它有关,因为这是这个库唯一不同于我使用过的其他库的地方。我也试过注释掉 use 命令,这使得库外的代码可以正常工作,但它会使库无法工作。也许在我包含这个库之后,我需要给出另一个 'use' 命令来为我的其余代码返回正确的命名空间。但是,由于我从未为代码设置命名空间,所以我不知道 use 命令是什么。

这是有问题的库: https://github.com/naitsirch/tcpdf-extension

另一个可能相关的细节:我的大部分代码都是过程式的。我经常使用 classes,但是大部分(非常大的)代码库根本不在 class 中。如果全部在 classes 中,我确定我可以为每个 class 添加 use 语句,但事实并非如此。

您应该通过以下方式在您的文件中使用“use”运算符。

use Tcpdf\Extension\Table\Table as TableClass;

在此之后,“new TableClass();”将实例化一个 Tcpdf\Extension\Table\Table Class

有关更多信息,请查看下方 link:-

PHP namespaces and "use"

希望对您有所帮助:-)

我发现将此库与现有的非命名空间过程代码一起使用的唯一方法是从库中删除所有 use 语句和命名空间语句。这个库只有 8 个文件,所以这并不难。如果人们有更好的方法,我仍然希望听到他们的答案,因为我相信这个问题会再次出现。