Typdeklarationen in Funktionsparameter
Mike_1980_1
- php
Hallo zusammen!
Ich versuche zur Zeit eine Funktion zu erstellen, die nur Variablen von Basis-Typen erstellt. Also z.B. nur Integer oder Strings.
function name(string $name, int $PLZ){...}
Den Code nimmt er mir an, allerdings gibt der mir immer eine recht seltsame Fehlermeldung:
Fatal error: Argument 1 must be an object of class string in ......
Der Übergabewert ist natürlich ein String bzw. ein Integer.
Greetz Mike
Hallo zusammen!
Ich versuche zur Zeit eine Funktion zu erstellen, die nur Variablen von Basis-Typen erstellt. Also z.B. nur Integer oder Strings.
function name(string $name, int $PLZ){...}
also, nach allem was ich weiß, gibt es in PHP weder typisierte Deklarationen noch typisierte Parameter.
Gruß,
KonRad -
Hello,
function name((string)$name, (int)$PLZ)
{
#...
}
Wenn schon, dann wahrscheinlich so.
Aber besser die Typen weglassen und in der Funktion mit settype() definiert umbuffen.
PHP hat beim Aufruf eigentlich keine Typprüfung, da alle Daten im Ascii-Format gehandelt werden.
Liebe Grüße aus http://www.braunschweig.de
Tom
function name((string)$name, (int)$PLZ)
{
#...
}
(string) ist leider nur ein Casting auf String, und die Syntax mag PHP nicht. :(
Aber besser die Typen weglassen und in der Funktion mit settype() definiert umbuffen.
Da mehrere Entwickler an diesem Projekt arbeiten, wäre es sehr aufwendig jede Parameterwert umzubuffern.
PHP hat beim Aufruf eigentlich keine Typprüfung, da alle Daten im Ascii-Format gehandelt werden.
Im PHP4-Manual steht zumindest eine Typprüfung auf eigene Klassen.
Und mich wundert es, wie z.B. mysql_connect(string Host,....) dies bewerkstelligt.
Greetz Mike
Hallo zusammen!
Also ich glaub ich hab des Rätels Lösung.
Habs bisher noch nicht getestet. Allerdings hab ich in einen php5 Thread eine einleuchtende Erklärung gefunden:
Es sieht so aus, dass nur selbstdefinierte Klassen erlaubt sind.
Würde man also eine eigene Stringklasse bauen, die dann als Typ übergegeben, dann sollte es laufen.
Anderfalls muss man eine Typüberprüfung in der Fkt. schreiben.
kleiner Code für alle die es interessiert:
function ($name, $plz)
{
if(!is_string($name))
die('Argument ist kein String!');
if(!is_int($plz))
die('Argument ist kein Integer!');
}
Greetz Mike