Ist es möglich, eine lokale Konstante innerhalb einer PHP-Funktion zu definieren?

Lesezeit: 3 Minuten

Benutzer-Avatar
Arth

Es könnte schön sein, eine lokale Konstante im Rahmen einer Funktion in PHP definieren zu können

Auf diese Weise würde jeder, der die Funktion liest, wissen, dass diese Definition innerhalb der Funktion endgültig ist und keinen externen Code beeinflusst

So etwas (nicht gültige Syntax):

public function laughManiacally($count){
  const LAUGH = 'HA';

  for($i=0;$i<$count;$i++){
    echo LAUGH;
  }
};  

Oder möglicherweise (wieder nicht gültig):

...
final $laugh="HA";
...

Gibt es trotzdem, dies zu tun? Und wenn nicht, warum nicht?

AKTUALISIEREN

Die Art und Weise, wie JavaScript die Deklaration von Konstanten auf Blockebene ermöglicht, ähnelt der Funktionalität, nach der ich gesucht habe

function laughManiacally(count) {
  const LAUGH = 'Ha';

  for (let i = 0; i < count; i++) {
    console.log(LAUGH);
  }
}

Benutzer-Avatar
Markus B

Du solltest haben

echo name_of_class::LAUGH

Andernfalls sucht PHP nach a global Konstante, die mit erstellt wurde define().


nachverfolgen:

Sie können Konstanten auch nur auf Objektebene definieren, z

class foo {
   const BAR = 'baz';  // valid

   function foo() {
      const BAR = 'baz'; // invalid. can't define constants INSIDE a method.
   }
}

  • gibt immer noch Fehler, vielleicht mache ich es falsch: –eval.in/654344 . korrigieren Sie mich

    – Anant – Lebendig um zu sterben

    3. Oktober 2016 um 15:31 Uhr

  • Cool, das habe ich erlebt, aber gibt es trotzdem eine lokale Variable als schreibgeschützt zu markieren?

    – Arth

    3. Oktober 2016 um 15:38 Uhr

  • es ist eine lokale Variable. Es kann nicht von “außerhalb” der Funktion darauf zugegriffen werden, also was bringt es, es schreibgeschützt zu machen? Wenn Sie möchten, dass es nur gelesen wird, schreiben Sie nicht darauf (außer zur Initialisierung).

    – Markus B

    3. Oktober 2016 um 15:41 Uhr

  • Aus dem gleichen Grund würde ich eine öffentliche Klassenvariable nicht als Klassenkonstante verwenden. Ich möchte mich und andere Teammitglieder daran hindern, darauf zu schreiben. Ich war auch neugierig.. Ich denke, das Kommentieren einer lokalen Variablen ist wahrscheinlich so nah, wie ich es bekommen werde!

    – Arth

    3. Oktober 2016 um 15:49 Uhr

Benutzer-Avatar
ShiraNai7

Nein, es gibt keine Konstanten auf Funktionsebene in PHP. Das Nächstliegende ist a Klasse konstant:

class A
{
    const LAUGH = 'HA';

    function laughManiacally($count)
    {
        for ($i=0; $i < $count; ++$i) {
            echo static::LAUGH;
        }
    }
}

$obj = new A();
$obj->laughManiacally(5);

Ausgabe:

HAHAHAHAHA

Ich habe es auch versucht final $laugh="HA";

Das final Das Schlüsselwort kann nicht auf Klasseneigenschaften angewendet werden, sondern nur auf Methoden.

  • Normalerweise finde ich, dass die Dokumentation keine Dinge spezifiziert, die nicht vorhanden sind.. und daher ist es nicht einfach, selten verwendete Konstrukte zu finden. Ich habe diese Syntaxversuche hauptsächlich verwendet, um die Art von Funktionalität zu demonstrieren, auf die ich gehofft hatte.

    – Arth

    3. Oktober 2016 um 15:45 Uhr

Benutzer-Avatar
Macht

Ich glaube, Sie verwirren const mit Spielraum hier.

function foo() {
    $x = 1;
}

Ich muss nicht deklarieren $x Als ein const weil es bereits auf nur beschränkt ist foo(). Ich müsste es explizit auf den globalen Geltungsbereich heben, um es anderswo zu verwenden (was aus vielen Gründen eine schlechte Idee ist). $x kann geändert werden, aber nur, wenn Sie dies innerhalb Ihrer Funktion tun oder den Code bearbeiten.

Ironischerweise werden Konstanten durch using festgelegt define sind global angelegt, mit const im Allgemeinen global, vorausgesetzt, Sie verwenden einen Autoloader

  • hmmm, könnte falsch sein, aber ich denke, sie wünschen sich eher die Aspekte “schreibgeschützt” und “einmal reserviert” von const. Dennoch ist dies eine wichtige Einsicht, da class const, global const und define alle effektiv globale Konstanten sind. Selbst wenn Sie also const im übergeordneten Geltungsbereich einer Funktion deklarieren müssen, gibt es in PHP praktisch keinen wirklichen Unterschied.

    – Dieser Realty Programmer Guy

    24. Juli um 4:02

1055080cookie-checkIst es möglich, eine lokale Konstante innerhalb einer PHP-Funktion zu definieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy