2017-01-19 13 views
1

TCPDF Beispiel 002 zeigt benutzerdefinierte Header/Footer-Methoden in einer erweiterten Klasse. Es funktioniert gut.PHP Class Erweiterung TCPDF

Ich habe eine allgemeinere Klassenhierarchie

In einer Datei

Class Three extends Two{ 
    public function Header(){ 
    die; 
    } 
    public function Footer(){ 
    die; 
    } 
} 

In einer anderen Datei

Class Two extends One{ 
    public function Header(){ 
    die; 
    } 
    public function Footer(){ 
    die; 
    } 
} 

In noch einer anderen Datei

Wo auch immer (Klasse eins, zwei oder drei) Ich stelle meine Funktionen Header() und Footer() sie überschreiben die Basismethoden in TCPDF.

Kann mir jemand sagen, wie mir das Überschreiben der Methode schadet? Die Die-Anweisungen werden nie erreicht und der Basis-Header wird angezeigt, so dass meine Überschreibungen nicht funktionieren.

Update:

get_declared_classes zeigt, dass alle Klassen geladen und in der richtigen Reihenfolge.

[316] => String(5) "TCPDF" 
[317] => String(15) "TCPDF_FONT_DATA" 
[318] => String(11) "TCPDF_FONTS" 
[319] => String(12) "TCPDF_COLORS" 
[320] => String(12) "TCPDF_IMAGES" 
[321] => String(12) "TCPDF_STATIC" 
[322] => String(24) "Drupal\pdf\One" 
[323] => String(30) "Drupal\pdf\Two" 
[324] => String(38) "Drupal\pdf\Three" 
+0

Bitte zeigen Sie Ihre 'Header()' Methoden und auch den Code, den Sie verwenden, um sie aufzurufen. – BizzyBob

Antwort

0

Das Problem ist, dass Sie eine Klasse erweitern, die noch nicht geladen wurde. Kehren Sie die Reihenfolge Ihrer Klassendefinitionen um.

Wenn Sie auf error_reporting(E_ALL) drehen sollten Sie einige Fehler sehen ähnlich wie:

"Fatal error: Class 'Three' not found in path/to/file on line x"

Also nur Umkehren sie sollte es lösen:

include('TCPDF.php'); 

//In yet another file 
Class One extends TCPDF 
{ 
    public function Header() 
    { 
     die; 
    } 

    public function Footer() 
    { 
     die; 
    } 
} 

//In another file 
Class Two extends One 
{ 
    public function Header() 
    { 
     die; 
    } 

    public function Footer() 
    { 
     die; 
    } 
} 


//in one file 
Class Three extends Two 
{ 
    public function Header() 
    { 
     die; 
    } 

    public function Footer() 
    { 
     die; 
    } 
} 
+0

Ihr Kommentar entzieht sich mir. Ich nenne neue Drei(). Wenn AddPage() aufgerufen wird, möchte ich, dass Three :: Header() nicht TCPDF :: Header() aufgerufen wird. Ich kontrolliere nicht das Laden von Elternklassen! – Ephraim

+0

Okay, sehen Sie irgendwelche Fehler beim Einschalten von 'error_reporting (E_ALL)' – BizzyBob

+0

Keine Fehler. Der Basis (übergeordnete) Header wird angezeigt, aber nicht der benutzerdefinierte (untergeordnete) Header. – Ephraim

0

hatte ich diesen Code

$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 

in

Class One extends \TCPDF 

effektiv zwei Instanzen von TCPDF haben !!.

Alles ist wieder wunderbar. Für eine Weile ist das so. Danke.