Stefan Göbel

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:

<?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