Können Sie statische Konstanten innerhalb von Klassen in PHP verwenden?
Lesezeit: 3 Minuten
Emanuil Russev
Ich habe erwartet, dass Folgendes funktioniert, aber es scheint nicht zu funktionieren.
<?php
class Patterns
{
public static const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
public static const INT = "/^\d+$/";
public static const USERNAME = "/^\w+$/";
}
Sie können const in der Klasse wie folgt verwenden:
class Patterns {
const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix";
const INT = "/^\d+$/";
const USERNAME = "/^\w+$/";
}
Und zugreifen kann USERNAME const so:
Patterns::USERNAME
Wenn es sich um eine Konstante handelt, sollte sie meiner Meinung nach vom PHP-Compiler intern als statisch behandelt werden, da ihr Wert nicht geändert werden kann.
– Basilikum Musa
19. Dezember 2015 um 14:34 Uhr
aber Werte von static variables können durch die Art und Weise geändert werden, wie diese als gleich behandelt werden static weil sie nicht implizit geändert werden können, aber sich ändern können, wenn sie von einer globalen Variablen und der abhängig sind global variable Änderungen vor dem instance von class geschaffen
– Ravinder Payal
16. Mai 2016 um 13:58 Uhr
Würde diese Methode keine Kopien der Konstanten für jede neue Instanz erstellen oder irre ich mich? Ist es möglich, Klassenkonstanten zu erstellen, die auf eine einzelne statische Referenz verweisen, oder ist dies in PHP einfach nicht möglich?
– cjsimon
11. Mai 2018 um 0:01 Uhr
Von dem Handbuch: “Beachten Sie, dass Klassenkonstanten einmal pro Klasse zugewiesen werden und nicht für jede Klasseninstanz.”
– cjsimon
18. Juni 2018 um 17:05 Uhr
In PHP sind static und const zwei verschiedene Dinge.
const bezeichnet eine Klassenkonstante. Sie unterscheiden sich von normalen Variablen, da sie kein ‘$’ vor sich haben und keine Sichtbarkeitsmodifikatoren (öffentlich, geschützt, privat) vor sich haben können. Ihre Syntax:
class Test
{
const INT = "/^\d+$/";
}
Weil sie konstant sind, sind sie unveränderlich.
Statisch bezeichnet Daten, die von Objekten derselben Klasse gemeinsam genutzt werden. Diese Daten kann modifiziert sein. Ein Beispiel wäre eine Klasse, die verfolgt, wie viele Instanzen gleichzeitig im Spiel sind:
class HowMany
{
private static $count = 0;
public function __construct()
{
self::$count++;
}
public function getCount()
{
return self::$count;
}
public function __destruct()
{
self::$count--;
}
}
$obj1 = new HowMany();
$obj2 = new HowMany();
echo $obj1->getCount();
unset($obj2);
echo $obj1->getCount();