Rolf B: Internet Exporer, Ersetzen von Fehlermeldungen unterdrücken

Beitrag lesen

Hallo Jörg,

einerseits: danke für diese Info. Das wusste ich bisher nicht.

Das API der Funktion sieht so aus:

  • übergibst Du keinen Parameter, ist er per Default FALSE und die Funktion berechnet die Anzahl der benötigten Füll-Minus
  • übergibst Du eine Zahl, wird diese als Wiederholfaktor für das "-" genutzt.

Du hast nach möglichen Einwänden gefragt, darum liste ich mal Möglichkeiten auf.

  • Wo ist der Usecase, überhaupt einen Parameter zu übergeben?
  • Würdest Du 0 oder -1 als Default verwenden, könntest Du PHP 7 Typdeklarationen für den Parameter verwenden
  • Die magische Konstante 75 kann man vermeiden, siehe unten
  • Es gibt eine Logiklücke: enthält der Outputbuffer 438 bis 511 Bytes, berechnest Du einen negativen Bedarf an Minuszeichen und str_repeat wirft eine Warnung. D.h. den str_repeat solltest Du nur machen wenn $z>0 ist.

Ich würde es so schreiben:

function preventIEErrorMessages( int $z=-1 ) {
  if ( ob_get_length() >= 511 )
    return;

  $s = '<!-- This will prevent IE-users to show microsofts own error messages. ';
  if ($z < 0 ) {
    $z = 512 - strlen($s) - 4 - ob_get_length();
  }
  if ($z > 0) {
    $s .= str_repeat( '-', $z );
  }
  echo $s . ' -->';
}

Warum der return statt eines if-Blocks? Der return ist eine Form von goto und darum unstrukturiert, unnötige Schachtelung ist aber ebenfalls ärgerlich. Und es ist guter Brauch, zu Beginn eine Funktion zu fragen, ob ihre Nutzung unnötig ist oder Parameter falsch sind, und dann sofort auszusteigen. Das entkoppelt Eingangsprüfungen vom regulären Code der Funktion.

  • Oder gar nicht: Muss es ein Kommentar sein, um den Zweck zu erfüllen? Du musst dich beim Nutzer deiner Seite ja nicht für das Padding rechtfertigen. Dann würden 512-ob_get_length() Spaces reichen und Du würdest mit der Längenrechnung nicht in der Bredouille landen. Es gibt schönere Gegenden in Frankreich…

Wie gesagt - das sind Vorschläge. Es ist meine Meinung, es ist mein Stil zu programmieren. Nutze davon, was Du für gut hältst.

Rolf

--
sumpsi - posui - obstruxi