2012-03-30 11 views
0

Ich benutze PHP 5.3.8 mit CakePHP 2.1.1."global" funktioniert nicht in CakePHP 2.1.1 Ansichten

Dies ist meiner Ansicht nach (das Layout ist leer, es tatsächlich nur die Ansicht gibt selbst)

<?php 
// $present is not a view variable 
$present = 'Hello World!'; 

class ApplicationsPDF 
{ 
    public function CreateApplicationTable() 
    { 
     global $present; 
     exit(var_dump($present)); 
    } 
} 


$pdf = new ApplicationsPDF(); 
$pdf->CreateApplicationTable(); 
?> 

Der Ausgang ist null statt „Hallo Welt!“.

Wenn ich diesen Code in eine einzelne Datei kopieren und einfügen (die ich direkt aus dem Browser ausführen), funktioniert es perfekt!

Also muss es ein CakePHP-Fehler sein. Weiß jemand das?

+0

Ich kann mir nicht vorstellen, dass ein Bug dieses Signifikant nicht schon einmal erwischt wurde, aber es gibt nichts in den 5.3.9+ changelogs. Ich muss mir vorstellen, dass es etwas mit deiner lokalen Umgebung zu tun hat. Verwenden Sie auto_prepend_file, um etwas zu erstellen? –

+0

Nein, aber der obige Code wird von CakePHP 2.1.1 ausgeführt. Ich habe gerade herausgefunden, dass der Code perfekt eigenständig läuft. Ich werde die Frage bearbeiten. (Ich weiß, dass Stackoverflow kein Bug Tracker ist, aber ich wollte diese Frage nicht löschen) – ComFreek

+0

Ich weiß, dass es nicht der Punkt ist, aber warum müssen Sie globale Variablen verwenden? Warum nicht "$ present" in den Konstruktor übergeben und eine Klassenvariable setzen? –

Antwort

0

Es ist kein PHP noch ein CakePHP Fehler!

Dies liegt daran, dass CakePHP die Ansicht in seiner Ansichtsklasse enthält, so dass die deklarierten Variablen nicht wirklich im globalen Gültigkeitsbereich liegen und global keine Auswirkung hat.

Von ADmad (source):

Wenn Sie führen Sie die Datei selbst Ihre Zuordnung $ testvar = 'Hallo Welt' ist im globalen Kontext also Dinge funktionieren wie Sie sie erwartet zu. Aber wenn es als Ansichtsdatei verwendet wird, ist die Datei in einer View-Klassenfunktion enthalten, daher ist sie nicht mehr im globalen Kontext und $ testVar ist keine globale Variable mehr, daher sind Ihre Erwartungen inkorrekt. Die Verwendung von globalen Variablen in einem OOP-Framework ist sowieso eine schlechte Idee.

0

Versuchen Sie, die globale Schlüsselwort vor der Klassendefinition zu erklären:

global $present; 

class ApplicationsPDF 
{ 
    public function CreateApplicationTable() 
    { 
     exit(var_dump($present)); 
    } 
} 
+0

Das funktioniert nicht und gibt mir eine 'Undefinierte Variable' Fehler in' CreateApplicationTable() '. – ComFreek

+0

Sie haben den Variablendeklarationsteil '$ present' nicht entfernt, oder? –

+0

habe ich nicht, aber dann wird '$ present' nie definiert (es ist keine View-Variable). – ComFreek