PHP: Klassen-Konstanten nutzen

In PHP können Konstanten auch in Klassen als Klassenkonstanten definiert werden.

Das ist in folgender Situation nützlich: Wenn die Methoden einer Klasse Parameter enthalten, für die Werte erwartet werden, die für die betroffene Klasse spezifisch sind.

Dann ist es besser, Klassenkonstanten zu verwenden als die Werte direkt zu verwenden.

Vorteile:

  • Es kann dem Leser des Codes das Verständnis erleichtern.Der Leser kann sich leichter einen Überblick verschaffen, welche Werte erlaubt sind. Der Name der Konstanten kann aussagekräftiger sein als der Wert – oder zumindest ein Kommentar zur Definition der Konstanten kann die Aussagekraft erhöhen.
  • Dem Programmierer/Tester fallen Tippfehler eher auf, da ein Tippfehler beim Namen der Konstanten zu einem “Fatal Error” führt.
  • Wenn ein Wert angepasst werden muss, muss die Anpassung nur noch an einer Stelle (bei der Definition der Konstanten) vorgenommen werden.
<?php
// Acme/ExampleClass.php
namespace Acme;

class ExampleClass
{
    // light color
    const COLOR_NORMAL = '#00a2ff';
    // dark color
    const COLOR_SPECIAL = '#002b44';

    /**
     * Show something.
     *
     * @param string $color Color of the thing
     */
    function showSomething($color) {
        if ($color === self::COLOR_NORMAL) {
            // ....
        }
        ...
    }
}

<?php
// app.php
require 'Acme/ExampleClass.php';

$ExampleObject = new Acme\ExampleClass();
$ExampleObject->showSomething(ExampleClass::COLOR_NORMAL);

Nicht so gut:

<?php
// Acme/ExampleClass.php
namespace Acme;
class ExampleClass
{
    function showSomething($color) {
        if ($color === '#00a2ff') {
            // ....
        }
        ...
    }
}

<?php
// app.php
require 'Acme/ExampleClass.php';

$ExampleObject = new Acme\ExampleClass();
$ExampleObject->showSomething('#00a2ff');

Es kommen weitere Verbesserungen in Betracht wie das Anlegen einer eigenen Klasse für die möglichen Werte.

https://refactoring.guru/smells/primitive-obsession