Размещено: 2023-12-13 15:31:19
Теги: php
КОНСТАНТЫ В PHP
Для работы с какими-то данными, которые не меняются в процессе работы нашего файла, и которые потребуется часто доставать в функциях, удобно использовать константы. Допустим мы работаем со сторонним API и есть ключи, либо id-пользователя либо еще что-то, что не меняется и часто указывается во всех функциях.
Тогда нет смысла каждый раз это передавать в виде переменных в кучу разных функций еще и с разной вложенностью, и часто рекурсией, тянуть это из функции в функцию.
Константы в этом случае лучшее решение. Для задания константы можно использовать 2 способа: define или const, область видимости констант public, и они легко достаются в любой обычной функции.
//задаем значение константе NAME через define define('NAME','stas'); //задаем значение константе NAME_1 через const const NAME_1='ivan'; //выведем просто echo NAME.'-----'.NAME_1.'<br>'; function names() { //выведем внутри функции echo 'FUNCTION:'.NAME.'-----'.NAME_1.'<br>'; } //не забудем её запустить names();
Данный пример выведет:
stas-----ivan FUNCTION:stas-----ivan
Проверка на существование константы и её значения
Что бы проверить на существование константу и её значение необходимо проверить 2 условия: что она задана, и что она не null. Проверить просто !CONST_TEST - не получится, в случае если её значение не задано она будет null, а в случае если она сама не задана, то её значение будет равно её имени CONST_TEST.
$s='texttest'; //если значения не будет то константа всеравно будет существовать, но со значением null define('CONST_TEST', $s); //если закомментировать define, то константа не будет задана, но всеравно её значение будет равно её имени if(!defined('CONST_TEST') || CONST_TEST===NULL) { echo '<log>error:CONST_TEST</log>'; return false; }
А если пытаться в константы пихать json, то еще и третья проверка нужна:
if(!defined('CONST_TEST') || CONST_TEST===NULL || CONST_TEST=='null'){return false;}
Выглядит конечно ужасно, но это точно работает.
Функция для проверки существования константы и существования её значения
Написал функцию для проверки существования константы и существования её значения, независимо от того массив она, число или строка.
function check_const($name) { if(!defined($name) || constant($name)===NULL || constant($name)=='null') { return false; } return true; } //$s=array("a"=>12345,"b"=>65432); define('CONST_TEST', json_encode($s)); if(check_const('CONST_TEST')===true) { echo 'yes'; } else { echo 'no'; }
Разница между define() и const
const должны быть объявлены в верхней области. Это значит, что const нельзя использовать внутри функций/циклов/выражений if или try/catch блоков.
if ( 1 ) { const NAME = 'VALUE'; // не работает } // но if ( 1 ) { define( 'NAME', 'VALUE' ); // работает }
Что с массивами?
А с массивами тут полная шляпа. На старых версиях php, ниже 7, константы не могут задаваться в виде массивов. Ну и что тогда делать? Тогда либо serialize-unserialize, либо json_encode-json_decode. И для надежности и понятности наверно стоит json'ом даже на более новых версиях пользоваться, если скрипт планируется использовать где-то еще где стоит старая версия. Это кросс-версионное решение:
//есть какой-то массив $array=array("a"=>"php","b"=>"js","c"=>"mysql"); //помещаем в константу в виде JSON строки define('ARR',json_encode($array)); //выводим из константы назад в массив print_r(json_decode(ARR, true)); /* выводит: Array ( [a] => php [b] => js [c] => mysql ) */
Как указать константу в mysql_query?
Тут все достаточно просто.
define('CONST_NAME','test_text'); $q=mysql_fetch_assoc(mysql_query(" SELECT * FROM `table1` WHERE `name`='".CONST_NAME."' "));
На эту страницу чаще всего попадают по запросам: константа, задать константу, const, define, глобальная, область видимости переменной, global