Können Sie statische Konstanten innerhalb von Klassen in PHP verwenden?

Lesezeit: 3 Minuten

Benutzer-Avatar
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+$/";
}

Weil es diesen Fehler auslöst:

syntax error, unexpected T_CONST, expecting T_VARIABLE

Benutzer-Avatar
Naveed

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();

Sie sind keine statischen Konstanten, nur Konstanten

class Patterns 
{ 
    const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix"; 
    const INT = "/^\d+$/"; 
    const USERNAME = "/^\w+$/"; 
} 

echo Patterns::EMAIL;

Nein, Klassenkonstanten können weder als statisch bezeichnet noch mit Sichtbarkeit versehen werden.

http://php.net/manual/en/language.oop5.static.php

Sie müssen sie nicht als statisch oder öffentlich deklarieren. Sehen Sie sich die Beispiele im Handbuch an:

http://www.php.net/manual/en/language.oop5.constants.php

Benutzer-Avatar
Chris

Wie versuchst du auf die Konstanten zuzugreifen?

Ich glaube das würde funktionieren:

Echomuster::$EMAIL;  //zeigt "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...."

If you just declare it as static.

1334580cookie-checkKönnen Sie statische Konstanten innerhalb von Klassen in PHP verwenden?

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

Privacy policy