使用命名空间的 PHP 类会导致我的代码不使用命名空间的问题.为什么


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

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

如果我包含该库,则会遇到php无法找到其他包含/必需文件的问题。例如:'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和/或命名空间命令与它有关,因为这是这个库唯一与我使用过的其他库不同的地方,没有任何问题。 我还尝试注释掉 use 命令,这使得库外的代码工作正常,但它使库不起作用。 也许在我包含这个库之后,我需要给出另一个"use"命令来为我的其余代码返回正确的命名空间。 但是,由于我从未为代码设置命名空间,因此我不知道 use 命令是什么。

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

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

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

use Tcpdf'Extension'Table'Table as TableClass;

在此之后,"new TableClass();"将实例化一个Tcpdf'Extension'Table'Table

欲了解更多信息,请查看以下链接:-

PHP 命名空间和"使用"

希望对您有所帮助:-)

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

更新:使用 Composer 安装库也可以解决此问题。