Wie kann ich eine Konstante innerhalb einer Klasse definieren und so gestalten, dass sie nur sichtbar ist, wenn sie in einem Klassenkontext aufgerufen wird?
....etwas wie Foo::app()->MYCONSTANT;
(und wenn aufgerufen, gerne MYCONSTANT
ignoriert werden)
Antworten:
Siehe Klassenkonstanten :
In diesem Fall Echo
MYCONSTANT
von selbst würde eine Mitteilung über einen nicht definierten Konstante und gibt die erhöht konstante Namen in einen String umgewandelt:"MYCONSTANT"
.BEARBEITEN - Vielleicht suchen Sie nach diesen statischen Eigenschaften / Variablen :
quelle
(is_null(self::$staticVariable) === true) && (isset($value) === true)
wäre viel prägnanter alsself::$staticVariable === null && $value !== null
.$value
wird immer gesetzt innerhalb der Funktion, so verwenden keine Notwendigkeitisset
. Und das Hyper-Explizite=== true
fügt nichts hinzu.Dies ist eine alte Frage, aber jetzt können Sie unter PHP 7.1 eine konstante Sichtbarkeit definieren.
BEISPIEL
Ausgabe des obigen Beispiels in PHP 7.1:
Mehr Infos hier
quelle
Dies ist die einzige Möglichkeit, Klassenkonstanten zu erstellen . Diese Konstanten sind immer global über zugänglich
Foo::BAR
, aber nicht nur überBAR
.Um eine Syntax wie zu erreichen
Foo::baz()->BAR
, müssten Sie ein Objekt aus der Funktionbaz()
einer KlasseFoo
mit einer Eigenschaft zurückgebenBAR
. Das ist aber keine Konstante. Jede von Ihnen definierte Konstante ist immer global von überall zugänglich und kann nicht auf Ergebnisse von Funktionsaufrufen beschränkt werden.quelle
Dies ist eine ziemlich alte Frage, aber vielleicht kann diese Antwort noch jemand anderem helfen.
Sie können eine öffentliche Konstante emulieren, die innerhalb eines Klassenbereichs eingeschränkt ist, indem Sie das Schlüsselwort final auf eine Methode anwenden, die einen vordefinierten Wert zurückgibt, wie folgt:
Das letzte Schlüsselwort für eine Methode verhindert, dass eine erweiterte Klasse die Methode neu definiert. Sie können das letzte Schlüsselwort auch vor die Klassendeklaration stellen. In diesem Fall verhindert das Schlüsselwort die Klassenvererbung.
Um fast genau das zu bekommen, wonach Alex gesucht hat, kann der folgende Code verwendet werden:
Der emulierte konstante Wert wäre folgendermaßen zugänglich:
quelle
Sie können eine Klassenkonstante in PHP definieren. Auf Ihre Klassenkonstante kann aber auch von jeder Objektinstanz aus zugegriffen werden. Dies ist die Funktionalität von PHP. Doch ab php7.1 , können Sie Ihre Klasse Konstanten mit definieren Zugriffsmodifikatoren (
public
,private
oderprotected
).Eine Problemumgehung wäre, Ihre Konstante als
private
oder zu definierenprotected
und sie dann über a lesbar zu machenstatic function
. Diese Funktion sollte die konstanten Werte nur zurückgeben, wenn sie aus dem statischen Kontext aufgerufen wird.Sie können diese statische Funktion auch in Ihrer übergeordneten Klasse erstellen und diese übergeordnete Klasse einfach für alle anderen Klassen erben, um sie zu einer Standardfunktionalität zu machen.
Credits: http://dwellupper.io/post/48/defining-class-constants-in-php
quelle