如何为外部类设置适当的名称空间(FPDF)

时间:2018-09-20 20:14:43

标签: php namespaces

因此,我现在真的迷失了,试图找到一种使用我在作曲家中获得的FPDF库的方法。我的脑子很困惑,所以我希望我足够清楚。

我有这个作曲家文件:

{
    "require": {
        "phpmailer/phpmailer": "^6.0",
        "stripe/stripe-php": "^6.16",
        "setasign/fpdf": "1.8.1"
    },  
    "autoload": {
        "psr-4": {
            "PsyQuimper\\":"src/calendrier/php/"
        }
    }  
}

还有一个php文件,要求我从作曲家那里获得所有我的课程:

require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';

我想用FPDF库创建帐单。这是bill.php文件的开头:

<?php

use \setasign\fpdf\FPDF;

class Bill extends FPDF {
    private $billString;
    private $billDate;

    function __construct($date) {
        $this->billDate = $date;
        parent::__construct();
    }

但是,当我创建new Bill('2015-05-05')时,我收到一条错误消息:

  

找不到类'setasign \ fpdf \ FPDF'

我不明白我在做什么错。有人愿意在这里启发我吗?

编辑:

我替换了use \setasign\fpdf\FPDF;use FPDF

就这么简单。谢谢

1 个答案:

答案 0 :(得分:0)

setasign/fpdf不使用任何命名空间:https://github.com/Setasign/FPDF/blob/1.8.1/fpdf.php

您应该用\假装类名,以指示应使用全局命名空间中的类:

class Bill extends \FPDF

或导入此类:

use FPDF;

但是,在您的情况下,您的Bill类未命名空间,因此您只需删除use \setasign\fpdf\FPDF;,默认情况下,所有内容都将使用全局命名空间。

使用与包名称相同的名称空间不是严格的约定-您需要查看文档/代码/ composer.json来找到依赖项的实际名称空间。