Zoeken…


Syntaxis

  • define (string $ naam, gemengde $ waarde [, bool $ case_insensitive = false])
  • const CONSTANT_NAME = VALUE;

Opmerkingen

Constanten worden gebruikt om de waarden op te slaan die niet later zouden moeten worden gewijzigd. Ze worden ook vaak gebruikt om de configuratieparameters op te slaan, met name die welke de omgeving definiëren (dev / productie).

Constanten hebben typen zoals variabelen, maar niet alle typen kunnen worden gebruikt om een constante te initialiseren. Objecten en bronnen kunnen helemaal niet als waarden voor constanten worden gebruikt. Arrays kunnen worden gebruikt als constanten vanaf PHP 5.6

Sommige constante namen zijn gereserveerd door PHP. Deze omvatten true , false , null en vele modulespecifieke constanten.

Constanten worden meestal genoemd met behulp van hoofdletters.

Controleren of constante is gedefinieerd

Eenvoudige controle

Gebruik de defined functie om te controleren of constant is gedefinieerd. Merk op dat deze functie niet om de waarde van de constante geeft, het geeft alleen om de constante of niet. Zelfs als de waarde van de constante null of false is, zal de functie nog steeds true retourneren.

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

Merk op dat constante pas in uw code 'zichtbaar' wordt na de regel waar u deze hebt gedefinieerd:

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

Alle gedefinieerde constanten ophalen

Gebruik de functie get_defined_constants om alle gedefinieerde constanten te krijgen, inclusief die gemaakt door PHP:

<?php

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

Om alleen die constanten te krijgen die door uw app zijn gedefinieerd, roept u de functie aan het begin en aan het einde van uw script aan (normaal gesproken na het bootstrap-proces):

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

Het is soms handig voor foutopsporing

Constanten definiëren

Constanten worden gemaakt met behulp van de instructie const of de define . De conventie is om HOOFDLETTERS te gebruiken voor constante namen.

Definieer constante met behulp van expliciete waarden

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

Definieer constante met behulp van een andere constante

als je een constante hebt, kun je een andere definiëren op basis daarvan:

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

Gereserveerde constanten

Sommige constante namen zijn gereserveerd door PHP en kunnen niet opnieuw worden gedefinieerd. Al deze voorbeelden zullen mislukken:

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

En een kennisgeving zal worden uitgegeven:

Constant ... already defined in ...

Voorwaardelijk definieert

Als u meerdere bestanden hebt waarin u dezelfde variabele kunt definiëren (bijvoorbeeld uw hoofdconfiguratie en vervolgens uw lokale configuratie), kan de volgende syntaxis helpen conflicten te voorkomen:

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

const vs define

define is een runtime-expressie, terwijl const een compilatie tijd één is.

Hiermee define u dynamische waarden (bijv. Functieaanroepen, variabelen enz.) En zelfs dynamische namen en voorwaardelijke definitie. Het is echter altijd bepalend ten opzichte van de root-naamruimte.

const is statisch (zoals in staat alleen bewerkingen toe met andere constanten, scalars of arrays, en slechts een beperkte set daarvan, de zogenaamde constante scalaire uitdrukkingen , dwz rekenkundige, logische en vergelijkingsoperatoren, evenals array dereferencing), maar zijn automatisch naamruimte voorafgegaan door de momenteel actieve naamruimte.

const ondersteunt alleen andere constanten en scalars als waarden en geen bewerkingen.

Klasseconstanten

Constanten kunnen binnen klassen worden gedefinieerd met behulp van een const sleutelwoord.

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;

Dit is handig om soorten items op te slaan.

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

Constant arrays

Arrays kunnen worden gebruikt als gewone constanten en klasseconstanten vanaf versie PHP 5.6:

Klasse constant voorbeeld

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

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

Gewoon constant voorbeeld

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

Ook vanaf versie PHP 7.0 werd deze functionaliteit geport naar de define voor gewone constanten.

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

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

Constanten gebruiken

Gebruik de naam om de constante te gebruiken:

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

print APP_ENV_UPPERCASE;

of als u de naam van de constante niet van tevoren weet, gebruikt u de constant functie:

// 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow