luq techblog

o tworzeniu słów kilka…

PHP i define() 5 stycznia 2011

Filed under: PHP — Łukasz @ 23:46
Tags: ,

To będzie bardzo krótki wpis, do których raczej nie przyzwyczaiłem ;)
Na początek zagadka, co spowoduje podany kod:

 

 
  echo 100;
  define('100', 'stala 100');
  echo 100;

 

Wywali błąd? Nadpisze wartość liczby?
Otóż nie. Jeśli nastąpiłoby nadpisanie wartości integera były to spory idiotyzm ze strony języka. Jednak co ciekawe nie wywali też błędu i stała o nazwie ‚100’ powstanie, czego dowodem jest:

 

  print_r(get_defined_constants());
  /*
    zwróci:

    (...)
    [100] => stala 100
  */

 

Jednak nijak nie dostaniemy się do podanej stałej poprzez samą jej nazwę, jedynym sposobem jest użycie funkcji:

 

 
  echo constant('100');

 

Dla porównania Javascript nie pozwala na takie rzeczy:

 

 
const 100 = 'stala 100'; // SyntaxError: missing variable name

 

Na koniec dodam tylko, że pomysł na wpis zrodził się, jak już niejednokrotnie było, przez forum.php.pl. Niestety w ten sposób zmiany VAT-u w swojej aplikacji nie dokonamy :D