PHP
Konstanter anter~~POS=HEADCOMP
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);