Szukaj…


Składnia

  • Zdefiniuj (ciąg $ nazwa, mieszana $ wartość [, bool $ case_insensitive = false])
  • const CONSTANT_NAME = WARTOŚĆ;

Uwagi

Stałe są używane do przechowywania wartości, których później nie należy zmieniać. Są również często używane do przechowywania parametrów konfiguracyjnych, szczególnie tych, które definiują środowisko (program / produkcja).

Stałe mają typy takie jak zmienne, ale nie wszystkie typy mogą być użyte do inicjalizacji stałej. Obiekty i zasoby nie mogą być w ogóle używane jako wartości stałych. Tablice mogą być używane jako stałe począwszy od PHP 5.6

Niektóre stałe nazwy są zastrzeżone przez PHP. Należą do nich zarówno true , false , null jak i wiele stałych specyficznych dla modułu.

Stałe są zwykle nazywane przy użyciu wielkich liter.

Sprawdzanie, czy zdefiniowano stałą

Prosta kontrola

Aby sprawdzić, czy stała jest zdefiniowana, użyj defined funkcji. Zauważ, że ta funkcja nie dba o wartość stałej, obchodzi ją tylko, czy stała istnieje, czy nie. Nawet jeśli wartość stałej jest równa null lub false funkcja nadal zwróci true .

<?php

define("GOOD", false);

if (defined("GOOD")) {
    print "GOOD is defined" ; // prints "GOOD is defined"

    if (GOOD) {
        print "GOOD is true" ; // does not print anything, since GOOD is false
    }
}

if (!defined("AWESOME")) {
   define("AWESOME", true); // awesome was not defined. Now we have defined it 
}

Zauważ, że stała staje się „widoczna” w twoim kodzie dopiero po linii, w której ją zdefiniowałeś:

<?php

if (defined("GOOD")) {
   print "GOOD is defined"; // doesn't print anyhting, GOOD is not defined yet.
}

define("GOOD", false);

if (defined("GOOD")) {
   print "GOOD is defined"; // prints "GOOD is defined"
}

Uzyskiwanie wszystkich zdefiniowanych stałych

Aby uzyskać wszystkie zdefiniowane stałe, w tym te utworzone przez PHP, użyj funkcji get_defined_constants :

<?php

$constants = get_defined_constants();
var_dump($constants); // pretty large list

Aby uzyskać tylko te stałe, które zostały zdefiniowane przez aplikację, należy wywołać funkcję na początku i na końcu skryptu (zwykle po zakończeniu procesu ładowania):

<?php

$constants = get_defined_constants();

define("HELLO", "hello"); 
define("WORLD", "world"); 

$new_constants = get_defined_constants();

$myconstants = array_diff_assoc($new_constants, $constants);
var_export($myconstants); 
   
/* 
Output:

array (
  'HELLO' => 'hello',
  'WORLD' => 'world',
) 
*/

Czasami jest przydatny do debugowania

Definiowanie stałych

Stałe są tworzone za pomocą instrukcji const lub funkcji define . Konwencja polega na użyciu wielkich liter dla stałych nazw.

Zdefiniuj stałą za pomocą jawnych wartości

const PI = 3.14; // float
define("EARTH_IS_FLAT", false); // boolean
const "UNKNOWN" = null; // null
define("APP_ENV", "dev"); // string
const MAX_SESSION_TIME = 60 * 60; // integer, using (scalar) expressions is ok

const APP_LANGUAGES = ["de", "en"]; // arrays


define("BETTER_APP_LANGUAGES", ["lu", "de"]); // arrays

Zdefiniuj stałą, używając innej stałej

jeśli masz jedną stałą, możesz na jej podstawie zdefiniować inną:

const TAU = PI * 2;
define("EARTH_IS_ROUND", !EARTH_IS_FLAT);
define("MORE_UNKNOWN", UNKNOWN);
define("APP_ENV_UPPERCASE", strtoupper(APP_ENV)); // string manipulation is ok too
// the above example (a function call) does not work with const:
// const TIME = time(); # fails with a fatal error! Not a constant scalar expression
define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60);

const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES; // array manipulations


define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"], APP_BETTER_LANGUAGES));

Stałe zarezerwowane

Niektóre stałe nazwy są zastrzeżone przez PHP i nie można ich przedefiniować. Wszystkie te przykłady zakończą się niepowodzeniem:

define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded

Zostanie wydane zawiadomienie:

Constant ... already defined in ...

Definicje warunkowe

Jeśli masz kilka plików, w których możesz zdefiniować tę samą zmienną (na przykład konfigurację główną, a następnie konfigurację lokalną), wówczas następująca składnia może pomóc w uniknięciu konfliktów:

defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"

const vs define

define jest wyrażeniem wykonawczym, podczas gdy const jest czasem kompilacji.

Zatem define pozwala na wartości dynamiczne (tj. Wywołania funkcji, zmienne itp.), A nawet nazwy dynamiczne i definicję warunkową. Jednak zawsze definiuje się względem głównej przestrzeni nazw.

const jest statyczny (jak w dopuszcza tylko operacje z innymi stałymi, skalarami lub tablicami i tylko ich ograniczony zestaw, tak zwane stałe wyrażenia skalarne , tj. operatory arytmetyczne, logiczne i porównania, a także dereferencje tablicowe), ale są automatycznie przestrzenią nazw z prefiksem aktualnie aktywnej przestrzeni nazw.

const obsługuje tylko inne stałe i skalary jako wartości i nie ma operacji.

Stałe klasowe

Stałe mogą być definiowane wewnątrz klas za pomocą słowa kluczowego const .

class Foo {
    const BAR_TYPE = "bar";

    // reference from inside the class using self::
    public function myMethod() {
        return self::BAR_TYPE;
    }
}

// reference from outside the class using <ClassName>::
echo Foo::BAR_TYPE;

Jest to przydatne do przechowywania rodzajów przedmiotów.

<?php

class Logger {
    const LEVEL_INFO = 1;
    const LEVEL_WARNING = 2;
    const LEVEL_ERROR = 3;

    // we can even assign the constant as a default value
    public function log($message, $level = self::LEVEL_INFO) {
        echo "Message level " . $level . ": " . $message;
    }
}

$logger = new Logger();
$logger->log("Info"); // Using default value
$logger->log("Warning", $logger::LEVEL_WARNING); // Using var
$logger->log("Error", Logger::LEVEL_ERROR); // using class

Stałe tablice

Tablice mogą być używane jako stałe zwykłe i stałe klas od wersji PHP 5.6 i późniejszych:

Przykład stałej klasy

class Answer {
    const C = [2,4];
}

print Answer::C[1] . Answer::C[0]; // 42

Prosty stały przykład

const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; // 42

Również z wersji PHP 7.0 funkcjonalność została przeniesiona do define funkcji dla zwykłych stałych.

define('VALUES', [2, 3]);
define('MY_ARRAY', [
    1,
    VALUES,
]);

print MY_ARRAY[1][1]; // 3

Używanie stałych

Aby użyć stałej, po prostu użyj jej nazwy:

if (EARTH_IS_FLAT) {
    print "Earth is flat";
}

print APP_ENV_UPPERCASE;

lub jeśli nie znasz wcześniej nazwy stałej, użyj funkcji constant :

// this code is equivalent to the above code
$const1 = "EARTH_IS_FLAT";
$const2 = "APP_ENV_UPPERCASE";

if (constant($const1)) {
    print "Earth is flat";
}

print constant($const2);


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow