FPDF отказывается сотрудничать через наследование

#php #fpdf

#php #fpdf

Вопрос:

У меня есть два примера кода ниже. Один работает, но второй (использующийся extend для создания новой оболочки класса) — нет.

Обратите внимание, я значительно упростил следующие примеры.

Подход # 1

page.php:

 <?php

include("fpdf.php");
$pdf = new FPDF;
$pdf->AddPage();
$pdf->SetFont('Arial','',11);
$pdf->Output();

?>
  

Это работает так, как ожидалось. Это создает пустую страницу.

Подход # 2

Но затем, используя FPDF по наследованию, я получаю сообщение об ошибке (см. Ниже блоки кода).

myPDF.php:

 <?php

require ("fpdf.php");

class myPDF extends FPDF {

    function createMyPage() {
        $this->AddPage();
        $this->SetFont('Arial','',11);
        $this->Output();
    }

}

?>
  

page.php:

 <?php

include("myPDF.php");
$pdf = new myPDF;
$pdf->createMyPage();

?>
  

Этот второй подход выдает следующее предупреждение PHP и ошибку FPDF:

Предупреждение: in_array() ожидает, что параметром 2 будет array, значение null указано в /var/www/fpdftest/fpdf.php в строке 526 ошибка FPDF: неопределенный шрифт: helvetica

Есть идеи, чего мне здесь не хватает?

Комментарии:

1. Я не верю, что FPDF все еще поддерживается; однако, TCPDF является его логическим преемником (также бесплатным). Если вы можете (и я знаю, что это не всегда возможно с устаревшим кодом), переключитесь на TCPDF. (РЕДАКТИРОВАТЬ: И я вижу, что на форуме есть недавние ответы, так что, возможно, он не такой мертвый, как я думал, но я отчетливо помню, как читал автора, предлагающего людям перейти на TCPDF.)

2. Кроме того, чтобы попытаться ответить на ваш вопрос, вы можете захотеть вызвать $this->FPDF($orientation,$unit,$size); конструктор: fpdf.org/en/tutorial/tuto6.htm

3. Кроме того, это буквально две разные ошибки или одна? Как в, Warning и FPDF error ?.

4. Спасибо, Джаред, второе было именно тем, что требовалось, чтобы заставить его работать. Обе ошибки вызваны одним и тем же. Я также благодарен, что вы указали на TCPDF. Я не знал об этом. Я определенно собираюсь попробовать.

5. Нет проблем, я добавил это в качестве ответа, и, как я уже сказал, FPDF не может быть неактивным (форумы, конечно, не предполагают, что он, по крайней мере, не поддерживается). Мне действительно нравится TCPDF, но у FPDF также есть свои применения.

Ответ №1:

Когда вы создаете свой класс-оболочку, обязательно вызовите родительский конструктор:

 <?php // Always use the full <?php open tag

require ("fpdf.php");

class myPDF extends FPDF {

    // Or, __construct() if you only care about PHP5
    function myPDF($orientation='P', $unit='mm', $size='A4') {
        // Call parent constructor
        $this->FPDF($orientation,$unit,$size);
        // Initialization
        $this->B = 0;
        $this->I = 0;
        $this->U = 0;
        $this->HREF = '';
    }

    function createMyPage() {
        $this->AddPage();
        $this->SetFont('Arial','',11);
        $this->Output();
    }

}
  

http://fpdf.org/en/tutorial/tuto6.htm