Verwenden Sie dafür keine Konstanten. Verwenden Sie überhaupt keine globalen Konstanten.
Es gibt zwei Arten von Konstanten: Klassen- / Schnittstellenkonstanten und globale Konstanten.
Konstanten in Klassen oder Schnittstellen sind in Ordnung und manchmal nützlich. Ein zu vereinfachtes Beispiel:
interface Requirements
{
const MIN_PHP_VERSION = 5.4;
public function php_is_good();
}
class Theme_Requirements implements Requirements
{
public function php_is_good()
{
return version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
}
}
Beachten Sie jedoch, dass diese Konstanten immer öffentlich sind. Wenn Sie sie später ändern, können Sie den von ihnen abhängigen Code beschädigen.
Dies ist bei globalen Konstanten noch schlimmer. Stellen Sie sich Folgendes vor:
define( 'THEME_URI', get_template_directory_uri() );
Und dann eine Funktion für ein Standard-Header-Bild:
function get_default_header_image()
{
return THEME_URI . '/img/default-header.jpg';
}
Diese Funktion geht von etwas aus, das außerhalb ihrer Kontrolle liegt, sie weiß zu viel. Wie testet man diese Funktion mit unterschiedlichen Werten für die Konstante? Das kannst du nicht.
Angenommen, Sie möchten testen, was passiert, wenn die Konstante auf ein nicht vorhandenes Verzeichnis oder einen anderen, langsameren Server festgelegt wird. Sobald Sie die Konstante definiert haben, können Sie ihren Wert nicht mehr ändern. Sie können nicht alle Tests auf einmal ausführen. Dies macht das Testen schwieriger als nötig.
Und in einem untergeordneten Thema, das versucht, ein eigenes Standardbild zu verwenden - wie implementieren Sie das? Die Konstante wird durch das übergeordnete Thema festgelegt. Sie könnten einen Scheck mit hinzufügen defined()
, aber das macht es schwieriger zu sehen, wo sein Wert tatsächlich geschrieben wurde.
Es wäre viel besser, die Funktion umzuschreiben, um:
function get_default_header_image( $base )
{
return esc_url( $base ) '/img/default-header.jpg';
}
Ich habe vorhin gesagt, Konstanten sind eine API. APIs sollten leicht zu ändern sein, aber es ist wirklich schwierig, eine Konstante zu verwerfen, da PHP den Zugriff nicht protokolliert. Daher wird Ihre Ablehnungsnachricht niemals andere Entwickler erreichen, es sei denn, sie lesen Ihren Quellcode oder Ihre Dokumente sehr sorgfältig. Vertrau mir, das tun sie nicht.
Verwendung get_stylesheet_directory_uri()
in untergeordneten und get_template_directory_uri()
übergeordneten Themen. Beide können zur Laufzeit gefiltert werden, sodass Sie alle Tests gleichzeitig ausführen können.