2017-06-11 6 views
0

Mein Versuch: Es gibt $getSomeData Funktion in einer Datei namens bradpitt.php. Es ist eine einfache Funktion. Was ist nicht in einer Klasse. Wo ich einen anderen Dateinamen habe jolie.php. Diese Datei hat eine Klasse. Wo ich versuche, auf $getSomeData() in dieser Datei zuzugreifen.PHP - Zugriff auf eine Nicht-Klasse-Funktion innerhalb einer Klasse

CoolPlugin.php

class CoolPlugin extends plugin 
{ 
    const COOLLIST = 'properties/coolBoy.json'; 

    public function getSomeData() { 
     return DataUtil::readDataFile(self::COOLLIST); 
    } 

bradpitt.php (Non-Klasse File - eine einfache Funktion)

$getSomeData = function(){ 
    $plugin = new \simulator\CoolPlugin(); 
    return $plugin->getSomeData(); 
}; 

jolie.php

include_once 'bradpitt.php'; 
class Jolie{ 
    public $getSomeData; 
    public function __construct(){ 
     global $getSomeData; 
     $this->$getSomeData(); 
    } 
} 

output.php

include_once 'jolie.php'; 
$joiliePage = new Jolie(); 
var_dump($joiliePage->getSomeData); 

ERROR: 
Notice: Undefined variable: joiliePage in output.php on line 173 
Notice: Trying to get property of non-object in output.php on line 173 
**NULL** 

Wie eine einfache Funktion aufzurufen und Zugriff innerhalb einer anderen Klasse in PHP (eine Rückkehr als Objekt haben)?

Was mache ich falsch, wo es NULL zurückgibt?

+2

Für den Anfang: 'joliePage'! =' JoiliePage'. Fügen Sie 'jolie.php' auch in' output.php' ein? – FirstOne

+0

@FirstOne - Entschuldigung! und korrigierte Tippfehler und fügte 'jolie.php' in' output.php' hinzu. –

+0

Ihr Code in https://3v4l.org/G9T0H sollte eine Rückgabe als Objekt in CoolPlugin.php haben. Mein ultimatives Ziel ist es, 'coolBoy.json' Daten in' jolie.php' zu drucken. Wenn ich einen direkten Ausdruck in 'output.php' wie '$ see = $ getSomeData(); var_dump ($ see); 'Ich erhalte die JSON-Daten, aber wenn ich versuche, auf' joile.php' zuzugreifen und sie zu drucken, passiert das nicht. * Wie soll ich das selbe auf OO-Art machen? * –

Antwort

1

Der von Ihnen gepostete Code ist voller Probleme.

var_dump($joiliePage->getSomeData); 

ERROR: 
Notice: Undefined variable: joiliePage in output.php on line 173 
Notice: Trying to get property of non-object in output.php on line 173 
**NULL** 

Unter der Annahme, Linie 173 die oben aufgeführt ist, beide Fehlermeldungen sagen das Gleiche: die Variable $joiliePage nicht initialisiert wurde (und der Dolmetscher der Auffassung, ihr Wert ist NULL).

Lassen Sie sich nicht durch die Tatsache täuschen, dass PHP sie als "Benachrichtigungen" klassifiziert. Es handelt sich um Hinweise aus der Sicht des Interpreters (es kann keine Variable finden), aber sie sind Fehler für Ihren Code, da sie nicht erfolgreich fortgesetzt werden können.


include_once 'bradpitt.php'; 
class Jolie{ 
    public $getSomeData; 
    public function __contruct(){ 
     global $getSomeData; 
     $this->$getSomeData() 
    } 
} 

Die Funktion __contruct() genannt wird, aber Sie wahrscheinlich wollen, dass es die Klasse sein constructor. Es ist nicht der Konstruktor und wird nicht automatisch vom Interpreter aufgerufen, weil er nicht den richtigen Namen hat. Der Name des Konstruktors lautet __construct(). Beachten Sie, dass ein "s" in der Mitte fehlt, das in Ihrem Code fehlt.

Die Methode __contruct() deklariert die globale Variable $getSomeData. Wenn die Datei bradpitt.php erfolgreich aufgenommen wurde (sie kann mit einer Warnung fehlschlagen, ohne das Skript zu unterbrechen, wenn die Datei nicht existiert), verweist das Symbol $getSomeData auf die gleichnamige Variable in der Datei bradpitt.php. Der Aufruf $this->$getSomeData() bezieht sich nicht auf diese globale Variable. Es verwendet die Eigenschaft der Klasse mit dem gleichen Namen, die initialisiert wird. Dieser Code wird nicht ausgeführt.

Um die Funktion in den globalen Variablen $getSomeData gespeichert zu nennen, sollte der Code lesen:

public function __construct(){ 
    global $getSomeData; 
    $getSomeData(); 
} 

Beachten Sie auch, dass die Anweisung ein Semikolon am Ende fehlt, und erzeugt einen Syntaxfehler. Die Definition Ihrer Klasse ist falsch, sie kompiliert nicht und Objekte des Typs Jolie können nicht erstellt werden.

+0

danke für deine Mühe .. und '__construct' ist kein Problem. Ich akzeptiere Ihre Antwort für '$ this -> $ getSomeData() bezieht sich nicht auf diese globale Variable'. Welches ist, wo es falsch gelaufen ist. –

Verwandte Themen