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

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

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

Подход №1

page.php:

<?php

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

?>

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

Подход №2

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

мойPDF.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 будет массивом, ноль указан в /var/www/fpdftest/fpdf.php в строке 526 Ошибка FPDF: Неопределенный шрифт: Helvetica

Любые идеи, что мне здесь не хватает?


person BudwiseЯ    schedule 13.11.2011    source источник
comment
Я не верю, что FPDF все еще поддерживается; однако TCPDF является его логическим преемником (также бесплатным). Если вы можете (и я знаю, что это не всегда возможно с устаревшим кодом), переключитесь на TCPDF. (РЕДАКТИРОВАТЬ: И я вижу, что на форуме есть недавние ответы, так что, возможно, он не так мертв, как я думал, но я отчетливо помню, как читал автора, предлагающего людям переключиться на TCPDF.)   -  person Jared Farrish    schedule 13.11.2011
comment
Кроме того, чтобы попытаться ответить на ваш вопрос, вы можете вызвать конструктор $this->FPDF($orientation,$unit,$size);: fpdf. org/en/tutorial/tuto6.htm   -  person Jared Farrish    schedule 13.11.2011
comment
Кроме того, это буквально две разные ошибки или одна? Например, Warning и FPDF error?.   -  person Jared Farrish    schedule 13.11.2011
comment
Спасибо, Джаред, второй был именно тем, что требовалось, чтобы заставить его работать. Обе ошибки были вызваны одним и тем же. Я также благодарен, что вы указали TCPDF. Я не знал об этом. Я определенно собираюсь попробовать.   -  person BudwiseЯ    schedule 13.11.2011
comment
Нет проблем, я добавил это в качестве ответа, и, как я уже сказал, FPDF не может быть неактивным (по крайней мере, форумы не предполагают, что он не поддерживается). Мне очень нравится TCPDF, но FPDF также имеет свое применение.   -  person Jared Farrish    schedule 13.11.2011


Ответы (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

person Jared Farrish    schedule 13.11.2011