Sök…


Syntax

  • definiera (sträng $ namn, blandat $ värde [, bool $ case_insensitive = falsk])
  • const CONSTANT_NAME = VALUE;

Anmärkningar

Konstanter används för att lagra värden som inte ska förändras senare. De används också ofta för att lagra konfigurationsparametrarna, särskilt de som definierar miljön (dev / produktion).

Konstanter har typer som variabler men inte alla typer kan användas för att initialisera en konstant. Objekt och resurser kan inte användas som värden för konstanter alls. Matriser kan användas som konstanter från PHP 5.6

Vissa konstanta namn är reserverade av PHP. Dessa inkluderar true , false , null såväl som många modulspecifika konstanter.

Konstanter benämns vanligtvis med stora bokstäver.

Kontrollera om konstant är definierad

Enkel kontroll

För att kontrollera om konstant är definierad använder du den defined funktionen. Observera att den här funktionen inte bryr sig om konstantens värde, den bryr sig bara om konstanten finns eller inte. Även om värdet på konstanten är null eller false funktionen kommer fortfarande tillbaka 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 
}

Observera att konstant blir "synlig" i din kod först efter raden där du har definierat den:

<?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"
}

Få alla definierade konstanter

För att få alla definierade konstanter inklusive de som skapats av PHP använder get_defined_constants funktionen get_defined_constants :

<?php

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

För att få endast de konstanter som definierades av din app, anropa funktionen i början och i slutet av ditt skript (normalt efter bootstrap-processen):

<?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',
) 
*/

Det är ibland användbart för felsökning

Definiera konstanter

Konstanter skapas med hjälp av const eller define . Konventet är att använda UPPERCASE-bokstäver för konstant namn.

Definiera konstant med hjälp av explicita värden

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

Definiera konstant med hjälp av en annan konstant

om du har en konstant kan du definiera en annan baserad på den:

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

Reserverade konstanter

Vissa konstanta namn är reserverade av PHP och kan inte definieras om. Alla dessa exempel kommer att misslyckas:

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

Och ett meddelande kommer att utfärdas:

Constant ... already defined in ...

Villkorligt definierar

Om du har flera filer där du kan definiera samma variabel (till exempel din huvudkonfig och din lokala konfigurering) kan följande syntax hjälpa till att undvika konflikter:

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

const vs define

define är ett runtime-uttryck medan const en kompileringstid.

Således define möjliggör dynamiska värden (dvs. funktionssamtal, variabler etc.) och till och med dynamiska namn och villkorlig definition. Det definierar emellertid alltid relativt rotnamnsområdet.

const är statisk (som i tillåter endast operationer med andra konstanter, skalar eller matriser, och endast en begränsad uppsättning av dem, de så kallade konstant skalära uttryck , dvs aritmetiska, logiska och jämförande operatörer samt array dereferencing), men är automatiskt namnutrymme förinställd med det nuvarande aktiva namnområdet.

const stöder bara andra konstanter och skalor som värden och inga operationer.

Klasskonstanter

Konstanter kan definieras i klasser med hjälp av ett const nyckelord.

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;

Detta är användbart för att lagra typer av objekt.

<?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

Konstant matriser

Arrays kan användas som vanliga konstanter och klasskonstanter från version PHP 5.6 och framåt:

Klass konstant exempel

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

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

Vanligt konstant exempel

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

Även från version PHP 7.0 portades denna funktionalitet till define för vanliga konstanter.

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

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

Använda konstanter

För att använda konstanten använder du bara namnet:

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

print APP_ENV_UPPERCASE;

eller om du inte vet namnet på konstanten i förväg, använd constant funktionen:

// 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow