Tach!
ich bin etwas stutzig geworden weil man ja in PHP kein Overloading betreiben sondern nur Parameter Defaults verwenden darf
Das ist eher eine Frage des Könnens. Man kann es einfach nicht, weil Methoden eindeutig benannt sein und einzig müssen. Man kann andererseits in der Deklaration einer Funktion sämtliche Parameterangaben weglassen und lediglich über Function handling Functions auf die zur Laufzeit tatsächlich übergebenen Parameterwerte zugreifen.
public PDOStatement::setFetchMode ( int $mode ) : bool
public PDOStatement::setFetchMode ( int $PDO::FETCH_COLUMN , int $colno ) : bool
public PDOStatement::setFetchMode ( int $PDO::FETCH_CLASS , string $classname , array $ctorargs ) : bool
public PDOStatement::setFetchMode ( int $PDO::FETCH_INTO , object $object ) : bool
Hier einen Auszug pdostatement.setfetchmode.php aus php.net
könnten da Try-Catch-Blöcke, welches die Parameter behandelt, in dieser
setFetchMode
enthalten sein?
Unwahrscheinlich. PHP ist ja nicht selbst in PHP geschrieben, und muss sich deshalb nicht zwingend an seine eigenen Syntaxregeln halten. So ist es möglich, dass Sprachkonstrukte existieren, die wie Funktionen aussehen, aber sich nicht wie andere PHP-Funktionen verhalten. Nur so können sie ihre Aufgabe erfüllen, ohne an den üblichen Mechanismen von PHP zu scheitern. Die Rede ist von isset() und empty(). Beide bekommen beim Aufrufen nicht lediglich den Wert des vorab aufgelösten Ausdrucks übergeben, sondern sie können auf den Variablennamen selbst zugreifen, um nach ihm in der internen Variablenverwaltung suchen zu können. Auf diese Weise können Fehlermeldungen beim Zugreifen auf nicht existierende Variablen vermieden werden. Andererseits (bei empty() vor PHP 5.5) können auch spezielle Meldungen generiert werden, wenn andere Ausdrücke statt nur Variablen übergeben werden. Diese Ausdrücke würden sonst vom übliche Mechanismus in ihren Wert aufgelöst werden, bevor sie empty() zu Gesicht bekommen könnte.
In deinem Fall ist es wohl eher so, dass das PHP-Handbuch sozusagen Phyntasie-Syntax zeigt. Das tut es bereits seit langem, wenn es die Tyen der erwarteten Parameter anzeigt, noch lange bevor solche Type Hints für PHP-Scripts selbst verfügbar waren. Auch nicht existierende Pseudotypen findet man in diesen Funktionsbeschreibungen.
Konkret wird es wohl eher so sein, dass der interne C-Code für diese Funktion lediglich bis zu drei generische Parameter (also ohne konkrete Typvorgabe) entgegennimmt und dann selbst entscheidet, wie sie ausgewertet werden.
Ich möchte saubere Codes schreiben können für eine Wiederverwendung.
Ja, was konkret hindert dich daran, die Funktion auf die eine oder (exklusives Oder) andere Weise aufzurufen, je nachdem, welchen Mode du einstellen möchtest?
Wenn ich jetzt
$statement->setFetchMode( $mode, null, null );
mitPDO::FETCH_ASSOC
schreibe meckert er. Wenn ich den Parameter Wertnull
weglasse funzt es.
Wen du verschiedene Fetch-Modes verwenden möchtest, diese aber über lediglich eine Funktion/Methode einstellen lassen möchtest, muss du letztlich genauso flexibel arbeiten und bis zu 4 Funktionsaufrufe darin unterbringen, und zu einem von ihnen je nach Mode verzweigen.
dedlfix.