PHP Australia Conference 2015

Składnia

Możesz zdefiniować stałą, używając funkcji define(). Raz zdefiniowana stała nie może byc zmieniona ani usunięta.

Stałe mogą zawierać jedynie dane skalarne (boolean, integer, float oraz string) Stałe nie mogą być typu resource.

Wartość stałej otrzymujemy, używając jej nazwy. W przeciwieństwie do zmiennych, nazw stałych nie poprzedzamy znakiem $. Możesz także użyć funkcji constant() do odczytania wartości stałej, jeśli chcesz wygenerować jej nazwę dynamicznie. Aby uzyskać listę wszystkich zdefiniowanych stałych, użyj get_defined_constants().

Informacja: Stałe i zmienne globalne operują w różnych przestrzeniach nazw. Oznacza to, że na przykład TRUE i $TRUE oznaczają co innego.

Jeśli używasz niezdefiniowanej stałej, PHP traktuje to, jak gdybyś chciał użyć nazwy stałej jako wartości typu string (STAŁA a "STAŁA"). Błąd typu E_NOTICE zostanie wywołany, kiedy to się stanie. Przeczytaj także, dlaczego $foo[bar] jest niepoprawne (jeśli nie zdefiniujesz bar jako stałej). Chcąc sprawdzić, czy dana stała istnieje, użyj funkcji defined().

Oto różnice pomiędzy stałymi i zmiennymi:

  • Nazwy stałych nie są poprzedzone znakiem dolara ($);
  • Stałe mogą zostać zdefiniowane jedynie przy użyciu funkcji define() a nie poprzez zwykłe przypisanie;
  • Stałe mogą być definiowane i używane wszędzie, niezależnie od zasięgu zmiennych;
  • Stałe nie mogą być zmieniane ani usuwane jeśli raz zostały ustawione ; oraz
  • Stałe mogą zawierać jedynie wartości skalarne.

Przykład #1 Definiowanie stałych

<?php
define
("CONSTANT""Hello world.");
echo 
CONSTANT// wypisuje "Hello world."
echo Constant// wypisuje "Constant" i wywoułuje ostrzeżenie.
?>

Zobacz także Stałe Klas.

add a note add a note

User Contributed Notes 4 notes

up
4
uramihsayibok, gmail, com
5 years ago
Don't let the comparison between const (in the global context) and define() confuse you: while define() allows expressions as the value, const does not. In that sense it behaves exactly as const (in class context) does.

<?php

// this works
/**
* Path to the root of the application
*/
define("PATH_ROOT", dirname(__FILE__));

// this does not
/**
* Path to configuration files
*/
const PATH_CONFIG = PATH_ROOT . "/config";

// this does
/**
* Path to configuration files - DEPRECATED, use PATH_CONFIG
*/
const PATH_CONF = PATH_CONFIG;

?>
up
0
kuzawinski dot marcin at NOSPAM dot gmail dot com
5 months ago
Actually, there is a way, to (re)declare FALSE (also: False, false, TRUE, NULL, etc.) constant, even if it is already declared:

<?php

var_dump
(constant('I_DONT_EXIST')); // warning "Couldn't find constant I_DONT_EXIST"
var_dump(constant('FALSE'));  //no warning, output: bool(false)

define('FALSE', TRUE);

var_dump(constant('FALSE')); //output: bool(true)

// but...

var_dump(constant('false')); // output: bool(false)
var_dump(FALSE); // output: bool(false);

?>
up
-1
0gb dot us at 0gb dot us
2 years ago
While most constants are only defined in one namespace, the case-insensitive true, false, and null constants are defined in ALL namespaces. So, this is not valid:

<?php namespace false;
const
ENT_QUOTES = 'My value';
echo
ENT_QUOTES;//Outputs as expected: 'My value'

const FALSE = 'Odd, eh?';//FATAL ERROR! ?>

Fatal error: Cannot redeclare constant 'FALSE' in /Volumes/WebServer/0gb.us/test.php on line 5
up
-14
timucinbahsi at gmail dot com
2 years ago
Constant names shouldn't include operators. Otherwise php doesn't take them as part of the constant name and tries to evaluate them:

<?php
define
("SALARY-WORK",0.02); // set the proportion

$salary=SALARY-WORK*$work; // tries to subtract WORK times $work from SALARY
?>
To Top