PHP ist bekannt für unlogische Reihenfolge der Parameters in der Deklaration von Funktionen. Außerdem besteht eine gewisse logische Beschränkung - wenn es mehr als 3 Parameter in der Funktionsdeklaration gibt, dann können die leicht verwechselt werden.
Hier ist ein Beispiel dazu:
str_replace (mixed $search, mixed $replace, mixed $subject [, int $count])
und
int strpos (string $subject, mixed $search [, int $offset=0])
Die Parameter $subject und $search sind vertauscht. Und wie wäre es mit z.B. 7 Parameters in einer Funktion? Kein seltener Fall.
Nehmen wir an, dass der Konstruktor von Objekt aufgerufen wird. Nicht selten ist der Fall, wenn nach dem Erstellen des Objekts mehrmals Set-Funktionen aufgerufen werden:
$a = new Text();
$a->setText("some text");
$a->setFont("Aril");
$a->setSize(12);
usw.
Haben Sie das schon irgendwo gesehen? :) Das hat mir sehr gestört, deshalb habe ich den Blick auf JavaScript geworfen, wo dieses Problem elegant gelöst wurde.
In JS (besonders in JS-Frameworks wie jQuery) wird als Parameter ein Objekt übergeben:
$.ajax({url: "test.html", context: document.body, success: function(){...}});
Solche Objekten in diesem Fall sind ähnlich wie die assoziativen Arrays in PHP. Statt mehrere Parameters zu übergeben, kann man nur ein Parameter $array verwenden. Der Inhalt von $array wird in der Funktion geparst und die notwendigen Parameters werden zugewiesen.
class TestObject { public function __construct($array=array()){
$array_element=get_object_vars($this); //get all parametrs from object
if (count($array)>0)
foreach($array as $key => $value) //set this parametr
if (in_array($key,$array_element)) $this->{$key}=$value;
...
}
$a = new TestObject(array("text"=>"some text","font"=>"Arial","size"=>"12"));
Fazit: nehmen wir immer die besten Features aus anderen Sprachen, damit unser PHP noch besser wird ;)
Bisland keine Kommentare - sei der erste!