簡體   English   中英

使用名稱空間的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個文件,因此並不難。 如果人們有更好的方法,我仍然想聽聽他們的答案,因為我敢肯定這個問題還會再次出現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM