2016-05-13 8 views
7

Ich möchte eine PHP 7-Funktion definieren, die einen Parameter vom gemischten Typ annimmt. (Was ich will, ist das Äquivalent eines generischen Typparameters in C#; wenn es eine bessere Möglichkeit gibt, das in PHP 7 zu emulieren, lass es mich wissen.)PHP 7: Wie verwende ich gemischte Parameter in meinen eigenen Funktionen?

Mein Code ist wie folgt.

Wenn ich diesen Code ausführen, bekomme ich Folgendes.

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of mixed, string given, called in mixed.php on line 11 and defined in mixed.php:4 
Stack trace: 
#0 mixed.php(11): test('hello') 
#1 {main} 
thrown in mixed.php on line 4 

Wenn ich den Anruf auf Kommentar zu testen(), wird der Code in Ordnung, es ist so offensichtlich zumindest in Ordnung für mich, den gemischten Parametertyp in der Funktionsdeklaration zu verwenden.

Ich weiß, integrierte PHP-Funktionen wie gettype() können gemischte Parameter, obwohl ich nicht weiß, ob sie intern strenge Typisierung verwenden.

Ich sehe, dass "gemischt" auch als Pseudo-Typ in PHP documentation verwendet wird, so könnte ich den Zweck von "gemischt" als PHP-Schlüsselwort missverstehen, aber was ich hier sehe, bedeutet zumindest für mich Es ist ein legitimes Schlüsselwort. Benutze ich es einfach so, dass es nicht dafür gedacht ist?

Endlich merke ich, dass ich all das umgehen könnte, indem ich einfach den Parametertyp nicht spezifiziere, aber ich möchte konsistent sein, indem ich alle meine Parameter und Rückgabetypen spezifiziere.

Vielen Dank und bitte lassen Sie mich wissen, wenn ich weitere Informationen zur Verfügung stellen kann.

+2

Ja, 'mixed' ist kein echter Typ. Und Konsistenz ist hier orthogonal zur richtigen Semantik. – mario

+2

FYI gemischt ist kein Typ. (http://php.net/manual/en/language.pseudo-types.php) Es ist nur ein ** Pseudotyp **: ein Hinweis, dass irgendein Typ an eine Methode übergeben oder von einer Methode zurückgegeben werden kann vielleicht für eine Variable, die aus irgendwelchen Gründen lose als gemischt eingegeben wurde ... Im Gegensatz zu C# könnte das, was Sie zu erreichen versuchen, in PHP besonders schwierig sein, wenn strict_types auf "true" gesetzt ist. Sie können jedoch ohne Strict Typing einen ähnlichen Effekt erzielen. In diesem Fall können Ihre Methoden jeden Typ akzeptieren, solange Sie keine Type-Hinweise angeben. Obwohl für C# Programmierer das ist noch schlecht ** das ist der Saft von PHP ** – Poiz

+1

Vielen Dank Mario und Poiz. Sieht so aus, als würde ich mich einfach damit begnügen,/* mixed */als Kommentar hinzuzufügen. – FSharpN00b

Antwort

7

FYI gemischte ist kein Typ. (Refer to the Documentation). Es ist nur ein Pseudotyp: ein Hinweis, dass jede Art könnte zu oder von einer Methode zurückübergeben wird ... oder vielleicht für eine Variable, die als aus irgendeinem Grunde gemischt lose typisierte ...

Anders als in C#, könnte das, was Sie erreichen möchten, in PHP schwierig sein, vor allem mit strict_types auf True gesetzt.

Sie können jedoch einen ähnlichen Effekt ohne Strict Typing erreichen - in diesem Fall können Ihre Methoden jeden Typ annehmen, solange Sie keine Typhinweise liefern. Obwohl für C# Programmierer, das ist schlecht - noch, das ist der Saft von PHP.

Verwandte Themen