2017-11-08 2 views
0

Ich habe ein Beispiel für eine Zahlungsverbindung heruntergeladen. Nein, ich versuche, es zu verwenden, aber der Konstruktor möchte die Schnittstelle erhalten, wenn ich ClassName deklariere Aber ich habe keine Ahnung, wie das geht. Ich versuchteSchnittstelle zum Konstruktor senden PHP

$interface = CallbackInterface::class; 
$interface = CallbackInterface(); 
$interface = CallbackInterface; 

Und viele mehr, aber ich kann es nicht herausfinden. Ich weiß nur, dass ich eine Schnittstelle zu einer Klasse implementieren soll. Vielleicht eine noob Frage, aber ich habe fast einen Tag ohne Erfolg gesucht.

$config = new Config('string1', 'string2'); 
$pay = new ClassName($config, $interface); 

interface CallbackInterface 
{ 
    public function Key($sIdentifier, $sTransactionKey); 
    public function tSuccess($sTransactionKey); 
} 

class ClassName 
{ 
    public function __construct(Config $oConfig, CallbackInterface $oCallbacks) 
    { 
     $this->oConfig = $oConfig; 
     $this->oCallbacks = $oCallbacks; 
    } 
} 
+0

Sie sind! ;-) "Das einzige, was ich weiß, ist eine Schnittstelle mit einer Klasse zu implementieren". Die Benutzeroberfläche ist nicht zur Instanziierung vorgesehen. Siehe https://stackoverflow.com/questions/8552505/when-to-use-interfaces-in-php oder https://stackoverflow.com/questions/1814821/interface-or-an-abstract-class-whichone oder verwenden Sie https://stackoverflow.com/questions/20463/what-is-the-point-of-interfaces-in-php für weitere Informationen –

+0

Ist die Datei mit der Schnittstelle enthalten, was meinst du mit ' Konstruktor möchte die Schnittstelle bekommen. – ArtisticPhoenix

+0

Ja, Sie müssen die Schnittstelle in einer Klasse implementieren und eine Instanz dieser Klasse an den Konstruktor übergeben. Das bedeutet ein Schnittstellenhinweis: * Ich erwarte ein Objekt, das dieser Schnittstelle entspricht. * Es will nicht * die Schnittstelle *, sondern ein Objekt mit dieser Schnittstelle. – deceze

Antwort

2

Sie entlang dieser Linien nach einer Lösung gesucht werden sollte schon richtig

// Create a class that implements the interface (e.g. MyClass) 
// MyClass implements the interface functions: Key and tSuccess 
// MyClass can now be injected as type CallbackInterface into the __construct() of class ClassName 

Class MyClass implements CallbackInterface 
{ 
    public function Key($sIdentifier, $sTransactionKey) 
    { 
     // your implementation here 
    } 
    public function tSuccess($sTransactionKey) 
    { 
     // your implementation here 
    } 
} 

interface CallbackInterface 
{ 
    public function Key($sIdentifier, $sTransactionKey); 
    public function tSuccess($sTransactionKey); 
} 

class ClassName 
{ 
    public function __construct(Config $oConfig, CallbackInterface $oCallbacks) 
    { 
     $this->oConfig = $oConfig; 
     $this->oCallbacks = $oCallbacks; 
    } 
} 

$config = new Config('string1', 'string2'); 
$interface = new MyClass(); // you've now instantiated an object of type CallbackInterface 
$pay = new ClassName($config, $interface); 
Verwandte Themen