dedlfix: mysqli: Umstellungsfehler

Beitrag lesen

Tach!

Bei Konstrukten wie solchen reagiere ich automatisch allergisch:

$this->colTitles[$i] = mysqli_fetch_field_direct($this->$result, $i)->name ;
switch (mysqli_fetch_field_direct($this->$result, $i)->type){

Sowas sollte man cachen:

$feldInfo = mysqli_fetch_field_direct($this->$result, $i);
$this->colTitles[$i] = $feldInfo->name;
switch ($feldInfo->type){

Vor allem ist es unnötige Verdopplung. Wenn eine Information mehrfach verwendet wird, sollte man das auch im Code verdeutlichen, indem man sie nicht mehrfach abfragt, sondern nur einmal und das Ergebnis dann mehrfach verwendet. Ansonsten muss man genau hinschauen, um zu erkennen, ob der Codeteil der Abfrage identisch oder doch anders ist. Lieber eine Zeile mehr für die Eindeutigkeit.

Es ist aber auch nicht optimal. Man weiß nicht, inwieweit der mysqli-Treiber diese Informationen puffert,

Man kann da was wissen, aber es ist nicht (nur) der mysqli-Treiber sondern mysqlnd. mysqlnd ist eine Extension von PHP, die im Hintergrund arbeitet und für das alte mysql, mysqli und auch PDO eine andere Schnittstelle bietet als die herkömmliche MySQL-Client-API. Namentlich geht mysqlnd so weit, dass es das Memorymanagement von PHP verwendet. Das äußert sich dahingehend, dass die vom DBMS geholten Daten bereits intern in PHP-Form vorliegen. Alle Zugriffe müssen dann nicht erst noch ins PHP-Variablenformat umkopiert werden, sondern können gleich von den API-Funktionen im PHP-Stil zurückgegeben werden. Der PHP-Stil hört auf den Namen Copy-On-Write. Wenn ein Wert anscheinend kopiert wird, zum Beispiel beim Zuweisen einer Variable zu einer anderen, passiert das intern nicht, sondern es wird nur eine Art Referenz erzeugt. Erst wenn die Variableninhalte abweichen wird die Kopie tatsächlich erzeugt.

Mit anderen Worten, das Cachen passiert intern wahrscheinlich schon. (Ich kann nicht für die Arbeitsweisen aller Funktionen sprechen, deswegen das "wahrscheinlich".) Zudem dürfte es im Bereich der Microoptimierung liegen. Performance ist also eher weniger das Thema, aber die Lesbarkeit von Code für Menschen ist wichtiger.

dedlfix.