JavaScript-Style in der PHP-Funktionen

16 Mar 2011 um 19:49 - PHP

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 ;)

Kommentare (2)

Cruoris hat geschrieben am 16 Oct 2012 um 03:50
±0

Hey, habe einen kleinen Rechtschreibfehler gefunden.
Das hat mir sehr gestört

In C# mit ASP.Net kann man das genauso verwenden wie in Javascript.

Anton Pavlushko hat geschrieben am 20 Oct 2012 um 19:03
±0

Ich entschuldige mich für meine Rechtschreibfehler, aber ich bin Ausländer, mein Deutschkurs habe ich selbst finanziert und ich kann mir schon leisten kein perfektes Deutsch zu haben :)


© 2008 Anton Pavlushko - Webentwicklung, Internetmarketing und Suchmaschinenoptimierung (SEO)

0.0066421031951904 sec