2017-05-30 3 views
0

Ich habe Klasse mit Konstanten. Wie kann ich sicher sein, dass actionWithParams() aktuelle Klassenkonstanten bekommt? Jetzt habe ich „Instanz“ Fehler:Wie lösen Sie die Fehlerinstanz bei der Aufrufmethode?

<?php 
class MyClass 
{ 
    const PARAM_1 = 1; 
    const PARAM_2 = 2; 

    protected $plans; 


    // .. 

    public function actionWithParam(MyClass $param){ 
     //... 
    } 
} 

$obj = new MyClass(); 
$obj = $obj->actionWithParam(MyClass::PARAM_1); 
+0

Sie können nicht. Auch 'MyClass $ param' bedeutet, dass' $ params' ein Objekt der Klasse 'MyClass' sein muss. – AbraCadaver

Antwort

1

Sie sind eine ganze Zahl vorbei, keine Instanz MyClass.

MyClass::PARAM_1 ist eine Ganzzahl, und das übergeben Sie an actionWithParam(). Da Sie diese Methode typisiert haben, erfordert es, dass das Argument eine "Instanz" der MyClass-Klasse ist, was eine Ganzzahl eindeutig nicht ist. Ziehen Sie einfach die "MyClass" -Anweisung aus und Sie sollten diesen Fehler nicht mehr bekommen.

Man muss sich allerdings fragen - warum übergibt man eine Klassenkonstante an eine Methode in dieser Klasse?

+0

_Ich muss allerdings fragen: Warum übergibt man eine Klassenkonstante an eine Methode in dieser Klasse? _ Das ist sehr häufig, warum würden Sie sie als globale Konstanten definieren? 'PDO :: FETCH_ASSOC' und viele andere. – AbraCadaver

+0

Ich weiß, dass removed typeHint funktioniert. Ich dachte mir vielleicht gibt es ja Hinweise, welche Klassenkonstanten verwendet werden müssen. – Fatas

1

Ihre Methodendefinition typehints der Parameter wie folgt aus:

public function actionWithParam(MyClass $param){ 

Das bedeutet $param muss eine Instanz von MyClass sein, aber du bist vorbei MyClass::PARAM_1, die eine ganze Zahl ist. Entfernen Sie einfach die typehint:

public function actionWithParam($param){ 

Oder Sie können einen ganzzahligen Parameter typehint:

public function actionWithParam(int $param){ 

Auch Sie wollen wahrscheinlich nicht, dies zu tun:

$obj = $obj->actionWithParam(MyClass::PARAM_1); 

Dies wird überschreiben Ihre $obj Objektinstanz mit dem Wert, den diese Methode zurückgibt.

Verwandte Themen