Константы классов

Константы также могут быть объявлены и в пределах одного класса. Отличие переменных и констант состоит в том, что при объявлении последних или при обращении к ним не используется символ $.

Значение должно быть неизменяемым выражением, не (к примеру) переменной, свойством, результатом математической операции или вызовом функции.

Интерфейсы также могут содержать константы (constants). За примерами обращайтесь к разделу об интерфейсах.

Начиная с версии PHP 5.3.0, стало возможным обратиться к классу с помощью переменной. Значение переменной не должно быть ключевым словом (например, self, parent или static).

Пример #1 Объявление и использование константы


Наша группа в телеграмм для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov
class MyClass
{
    const CONSTANT = 'значение константы';
    function showConstant() {
        echo  self::CONSTANT . "\n";
    }
}
echo MyClass::CONSTANT . "\n";
$classname = "MyClass";
echo $classname::CONSTANT . "\n"; // начиная с версии PHP 5.3.0
$class = new MyClass();
$class->showConstant();
echo $class::CONSTANT."\n"; // начиная с версии PHP 5.3.0

Пример #2 Пример со статичными данными

class foo {
    // Начиная с версии PHP 5.3.0
    const BAR = <<<'EOT'
bar
EOT;
}

В отличие от heredoc, nowdoc может быть использован в любом контексте статичных данных.


Замечание:

Поддержка nowdoc была добавлена в версии PHP 5.3.0.


User Contributed Notes 17 notes



22
ryan at derokorian dot com1 year ago
abstract class dbObject
{    
    const TABLE_NAME='undefined';
    
    public static function GetAll()
    {
        $c = get_called_class();
        return "SELECT * FROM `".$c::TABLE_NAME."`";
    }    
}
class dbPerson extends dbObject
{
    const TABLE_NAME='persons';
}
class dbAdmin extends dbPerson
{
    const TABLE_NAME='admins';
}
echo dbPerson::GetAll()."<br />";//output: "SELECT * FROM `persons`"
echo dbAdmin::GetAll()."<br />";//output: "SELECT * FROM `admins`"


13
anonymous3 years ago
/**
 * Constants that deal only with the database
 */
class DbConstant extends aClassConstant {
    protected $host = 'localhost';
    protected $user = 'user';
    protected $password = 'pass';
    protected $database = 'db';
    protected $time;
    function __construct() {
        $this->time = time() + 1; // dynamic assignment
    }
}


5
nanhe dot kumar at gmail dot com5 months ago
// define a test class
class Test 
{
    public static $open=2;
    protected static $var=1;
    private static $secret=3;
}
$classname="Test";
// reflect class information
$x=new ReflectionClass($classname);
$y=array();
foreach($x->GetStaticProperties() as $k=>$v) 
    $y[str_replace(chr(0),"@",$k)]=$v;
// define the variables to search for
$a=array("open","var","secret","nothing");
foreach($a as $b)
{
    if(isset($y["$b"])) 
        echo "\"$b\" is public: {$y["$b"]}<br/>";
    elseif(isset($y["@*@$b"])) 
        echo "\"$b\" is protected: {$y["@*@$b"]}<br/>";
    elseif(isset($y["@$classname@$b"])) 
        echo "\"$b\" is private: {$y["@$classname@$b"]}<br/>";
    else 
        echo "\"$b\" is not a static member of $classname<br/>";
}


1
wbcarts at juno dot com5 years ago
class Dimension
{
  const MIN = 0, MAX = 800;
  public $width, $height;
  public function __construct($w = 0, $h = 0){
    $this->width  = self::clamp($w);
    $this->height = self::clamp($h);
  }
  public function __toString(){
    return "Dimension [width=$this->width, height=$this->height]";
  }
  protected static function clamp($value){
    if($value < self::MIN) $value = self::MIN;
    if($value > self::MAX) $value = self::MAX;
    return $value;
  }
}
echo (new Dimension()) . '<br />';
echo (new Dimension(1500, 97)) . '<br />';
echo (new Dimension(14, -20)) . '<br />';
echo (new Dimension(240, 80)) . '<br />';


0
Anonymous1 month ago
class constant {
    const MODE_FLAG_1 = 1;
    const MODE_FLAG_2 = 2;
    const MODE_FLAG_3 = 4;
    const DEFAULT_MODE = self::FLAG_1 | self::FLAG_2
    private function foo ($mode=self::DEFAULT_MODE) {
        // some operations
    }
}


-1
jakub dot lopuszanski at nasza-klasa dot pl3 years ago
class A{
  const X=1;
  const Y=self::X;
}
class B extends A{
  const X=1.0;
}
var_dump(B::Y); // float(1.0)


-1
cwreace at yahoo dot com5 years ago
interface AppConstants
{
   const FOOBAR = 'Hello, World.';
}
class Example implements AppConstants
{
   public function test()
   {
      echo self::FOOBAR;
   }
}
$obj = new Example();
$obj->test();  // outputs "Hello, world."


-1
riku at helloit dot fi5 years ago
function get_class_const($class, $const){
  return constant(sprintf('%s::%s', $class, $const));
}
class Foo{
  const BAR = 'foobar';
}
$class = 'Foo';
echo get_class_const($class, 'BAR');
//'foobar'


-3
webmaster at chaosonline dot de7 years ago
class b extends a {
    private static $CONST = 'any value';
    public static function getConstFromOutside($const) {
        return self::$$const;
    }
    protected function getConst($const) {
        return self::$$const;
    }
}


-4
Anonymous4 years ago
class Foo
{
  const foo = 'bar';
  public $foo = 'foobar';
  const bar = 'foo';
  static $bar = 'foobar';
}
var_dump(foo::$bar); // static property
var_dump(foo::bar);  // class constant
$bar = new Foo();
var_dump($bar->foo); // object property
var_dump(bar::foo); // class constant


-3
nrg1981 {AT} hotmail {DOT} com6 years ago
class Weather
{
    const danger = 'parent';
    static function getDanger($class)
    {
        // Code to return the danger field from the given class name
    }
}
class Rain extends Weather
{
    const danger = 'child';
}


-3
moechofe1 year ago
const FOO = 'bar';
var_dump(FOO);




Смотрите также:
Описание на ru2.php.net
Описание на php.ru

.

Популярное:


Содержание: