2009-10-21 10 views
6

Ist es normal, den Fehler „Standardwert für Parameter mit einem Klasse-Typ Hinweis nur NULL sein kann“ bekommen für ein Verfahren in einer definierten Schnittstelle alsStarke Typisierung Fehler

public function nullify(bool $force=FALSE); 

?

Ich brauche es bool, kein Objekt und FALSE standardmäßig.

+2

Es sollte mit php7 funktionieren –

Antwort

10

Es gibt keine Art Hinting für boolesche Parameter in PHP (noch). Sie können nur einen Klassennamen oder array angeben. Daher bedeutet function foo(bool $b): "Der Parameter $ b muss eine Instanz der Klasse 'bool' oder 'null' sein.

http://docs.php.net/language.oop5.typehinting:

Funktionen können nun Parameter zwingen Objekte (durch den Namen der Klasse, in dem Funktionsprototyp spezifiziert) oder Arrays (seit PHP 5.1).
3

PHP 5 Typ Hinting ist auf eine bestimmte Klasse (oder eine ihrer Unterklassen) oder ein Array beschränkt. Sie können keine anderen Skalartypen angeben.

5

Wie bereits erwähnt, Typ Hinting funktioniert nur für Arrays und Objekt. Ihre Funktion kann wie folgt geschrieben werden:

+1

Oder einen user_error auslösen oder eine Ausnahme auslösen, wenn false === is_bool ($ force) näher an den "abfangbaren fatalen Fehler" php raisen für ungeeignete Parameter. – VolkerK

1

Sie können einen Parameter nicht zwingen, ein Boolean zu sein.

Wie in language.oop5.typehinting gefunden:

PHP 5 führt Typ Hinting. Funktionen können nun Parameter zu Objekten [...], Interfaces, Arrays (seit PHP 5.1) oder abrufbar (seit PHP 5.4) zwingen.

[...]

Type Hints kann nicht mit skalare Typen wie int oder Zeichenfolge verwendet werden. [...]

Und wie in language.types.intro gefunden, PHP Skalar-Typen sind:

 
- boolean 
- integer 
- float (floating-point number, aka double) 
- string 
0

Sie könnten versuchen:

public function nullify($force){ 
    if(is_object($force)) $force = false; 
    ... 
} 

es als eine vorübergehende Lösung in Betracht, bis Sie ein Upgrade PHP.