Php const

Вы создали статический массив, а не постоянный массив. Статические переменные изменяемы; константы неизменяемы. Ваш код неплохой, но он не делает того, что вы намереваетесь сделать.

В PHP 5.6 вы можете объявить const
массивы. Пожалуйста, ознакомьтесь с моим предыдущим объяснением .

Возможно, вам нужно что-то вроде этого:

 class MyClass { const MY_ARRAY = array('test1','test2','test3'); public function getMyArray() { return MY_ARRAY; } } 

Обратите внимание, что константы не имеют префикса $ , что указывает на их неизменность. $foo
– переменная; FOO нет. Кроме того, постоянные имена всегда капитализируются, по крайней мере, на языках программирования, которым я подвергался. Это не выполняется компилятором; это просто (почти?) универсальный стиль кодирования. Ключевые слова видимости public
, protected и private не применяются к константам. Наконец, static могут применяться или могут применяться в зависимости от того, хотите ли вы, чтобы функция была static .

ruphp.com

Константа — это просто символьное имя для значения, которое обеспечивает возможность получить значение по имени, то есть, когда в программе указывается имя константы вместо неё подставляется значение.

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

При использовании констант необходимо учитывать следующие правила:


  • Перед именем константы не нужно ставить знак доллара.
  • По умолчанию имена констант чувствительны к регистру символов, это означает, что имена some_const, Some_const или SOME_CONST будут считаться, как имена трёх различных констант.
  • Константы могут иметь значения только следующих типов: boolean, integer, float, string, NULL и массивы.
  • Константы не работают внутри строк.
  • Константы доступны из любой области видимости, это означает, что их можно использовать в любом месте сценария.
  • Константа не может быть удалена.
  • Имена констант условились писать заглавными буквами.

Создать константу можно двумя способами: с помощью функции define() или с помощью ключевого слова const, за которым следует имя константы:

  <?php  // С помощью функции define()  define("SAY_HI", 'Hello!');    // С помощью ключевого слова const  const PI = 3.1416;    function foo() {   echo "<br>Число: ", PI;  }    foo(); // Число: 3.1416    echo "Число: PI <br>"; // Число: PI  echo "Число: ".PI; // Число: 3.1416  ?>  

Константы, создаваемые с помощью ключевого слова const создаются во время компиляции сценария. Это означает, что их нельзя определять внутри функций, циклов, условных инструкций и блоков try/catch
.

Константы, создаваемые с помощью функции define() могут быть определены в любом месте, так как они создаются во время выполнения сценария:

  <?php  function foo() {   define("NUM", 10);  }    foo();  echo NUM;  ?>  

puzzleweb.ru

никогда не используйте .onclick(), или аналогичные атрибуты из пользовательского скрипта! (кроме плохая практика в обычной веб-странице).

причина в том, что userscripts работают в песочнице («изолированный мир»), и onclick работает в области целевой страницы и не может видеть никаких функций, создаваемых вашим скриптом.

всегда использовать addEventListener() Doc (или эквивалентная библиотечная функция, например jQuery .on ()).

поэтому вместо кода типа:

something.outerHTML += '<input onclick="resetEmotes()" id="btnsave" ...>' 

Вы бы использовали:

something.outerHTML += '<input id="btnsave" ...>'  document.getElementById ("btnsave").addEventListener ("click", resetEmotes, false); 

для цикла вы не можете передавать данные в прослушиватель событий, как это см. док. Плюс каждый раз, когда вы меняете innerHTML таким образом, вы уничтожаете предыдущих слушателей событий!

без рефакторинга кода много, вы можете передавать данные с атрибутами данных. Так что используйте код это:

   
for (i = 0; i < EmoteURLLines.length; i++) { if (checkIMG (EmoteURLLines[i])) { localStorage.setItem ("nameEmotes", JSON.stringify (EmoteNameLines)); localStorage.setItem ("urlEmotes", JSON.stringify (EmoteURLLines)); localStorage.setItem ("usageEmotes", JSON.stringify (EmoteUsageLines)); if (i == 0) { console.log (resetSlot ()); } emoteTab[2].innerHTML += '<span style="cursor:pointer;" id="' + EmoteNameLines[i] + '" data-usage="' + EmoteUsageLines[i] + '">' + '<img src="' + EmoteURLLines[i] + '" /></span>' ; } else { alert ("The maximum emote (" + EmoteNameLines[i] + ") size is (36x36)"); } } //-- Only add events when innerHTML overwrites are done. var targetSpans = emoteTab[2].querySelectorAll ("span[data-usage]"); for (var J in targetSpans) { targetSpans[J].addEventListener ("click", appendEmote, false); }

где appendEmote, как:

function appendEmote (zEvent) {  //-- this and the parameter are special in event handlers. see the linked doc.  var emoteUsage = this.getAttribute ("data-usage");  shoutdata.value += emoteUsage; } 

  • ваш код использует один и тот же идентификатор для нескольких элементов. Не делай этого, это недопустимо. Данный идентификатор должен встречаться только один раз на странице.
  • каждый раз, когда вы используете .outerHTML или .innerHTML, вы уничтожаете любые обработчики событий на затронутых узлах. Если вы используете этот метод остерегайтесь этого факта.

coder-booster.ru

Константа в php, как и переменная, является ячейкой для хранения памяти. Константа — величина имеющая собственное имя, и не меняющаяся в процессе исполнения скрипта.

Применяются они, когда в программу нужно ввести пароль, путь к файлу, дату, и им подобные постоянные данные.

Определяется константа функцией define()

Пример:

Эта программа выведет на экран число 6548962

Рассмотрим составляющие:

«PAROL» — имя константы. Предпочтительно — заглавными буквами. Нельзя начинать цифрой.
6548962 — постоянное значение константы

Если при работе с константой необходимо будет учитывать регистр букв, то в скобки вводится значение параметра $case_sen — true

Пример использования констант на сайте: изображение шапки имеется на всех страницах сайта, и чтобы каждый раз не прописывать путь к файлу изображения, можно определить константу, присвоив ей это путь в значении, и затем использовать в нужной части скрипта

Кроме констант определяемых разработчиком, существуют константы, выставляемые интерпретатором. Это, например, сообщения об ошибках, указатели путей к файлам, а так же огромное количество констант объявленных в различных расширениях.

Список всегда доступных предопределённых констант


__LINE__ — текущая строка в файле
__FILE__ — полный путь и имя текущего файла
__FUNCTION__ — имя функции
__CLASS__ — имя класса
__METHOD__ — имя метода класса

Что такое предопределённая константа, вернее как она используется, хорошо понятно из примера вывода на экран сообщений об ошибках.

Браузер выведет такое сообщение.

Как видите, константы сами определили путь к файлу и номер строки в которых, возможно, появится ошибка. Наверное поэтому их ещё называют волшебным константами.

Для проверки существования константы, применяется функция dtfined(). Аргументом для неё всегда является имя константы. Если константа объявлена, то результатом проверки будет true (истина), если нет — false (ложь).

На экран выведется одно из значений в зависимости от того, будет обнаружена константа, или нет.

В этом скрипте применён условный оператор выбора — If. Подробнее о нём поговорим в статье «Операторы php».

Помимо пользовательских и предопределённых констант, php поддерживает ещё один, очень редко применяемый и малоизвестный вид констант — динамические константы.

Как видно из прилагательного (динамические), и вопреки своему названию, константы всё таки могут меняться, и это ещё раз указывает на гибкость языка php.


Делается это при помощи функции rand(), которая генерирует случайное число от 1 до 10, в дальнейшем применяющееся для формирования константы.

Определяется значение такой константы только при помощи функции constant(). Эта же функция определяет и существование динамической константы, и если последняя не существует, то constant() выводит на экран предупреждение Warning.

Эта программа выведет на экран значение — единицу. Интересная штука в плане безопасности программы. В дальнейшем разберёмся с ней подробнее.


Перемена

— У тебя есть мечта?
— Есть.
— Какая?
— Хочу бросить пить.
— Так брось.
— Да? А как потом жить без мечты?

Переменные в PHP < < < В раздел > > > Операторы PHP

Рекомендую: Готовые HTML шаблоны на русском

starper55plys.ru

Most people miss the point in declaring constants and confuse then things by trying to declare things like functions or arrays as constants. What happens next is to try things that are more complicated then necessary and sometimes lead to bad coding practices. Let me explain...


A constant is a name for a value (but it's NOT a variable), that usually will be replaced in the code while it gets COMPILED and NOT at runtime.

So returned values from functions can't be used, because they will return a value only at runtime.

Arrays can't be used, because they are data structures that exist at runtime.

One main purpose of declaring a constant is usually using a value in your code, that you can replace easily in one place without looking for all the occurences. Another is, to avoid mistakes.

Think about some examples written by some before me:

1. const MY_ARR = "return array("A", "B", "C", "D");";
It was said, this would declare an array that can be used with eval. WRONG! This is just a string as constant, NOT an array. Does it make sense if it would be possible to declare an array as constant? Probably not. Instead declare the values of the array as constants and make an array variable.

2. const magic_quotes = (bool)get_magic_quotes_gpc();
This can't work, of course. And it doesn't make sense either. The function already returns the value, there is no purpose in declaring a constant for the same thing.

3. Someone spoke about "dynamic" assignments to constants. What? There are no dynamic assignments to constants, runtime assignments work _only_ with variables. Let's take the proposed example:

<?php
/**
* 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
   
}
}
?>

Those aren't constants, those are properties of the class. Something like "this->time = time()" would even totally defy the purpose of a constant. Constants are supposed to be just that, constant values, on every execution. They are not supposed to change every time a script runs or a class is instantiated.

Conclusion: Don't try to reinvent constants as variables. If constants don't work, just use variables. Then you don't need to reinvent methods to achieve things for what is already there.

php.net

Решил вот заполнить пробел в знаниях и заодно сделать доброе дело и перевести вот этот пост (а если быть точнее, то лучший ответ на него) о различиях между объявлениями констант в PHP на русский. Если у кого-то будут замечания по переводу, пожалуйста указывайте на них, так как я далеко не переводчик ))

Фундаментальная разница между ними (const и define) состоит в том, что const объявляет константы во время компиляции, в то время как define объявляет их во время выполнения скрипта. Этот факт определяет большинство недостатков конструкции const. Вот некоторые из них:

  • const не может быть использована для динамически объявляемых констант. Чтобы объявить глобальную константу, она должна быть применена на самом внешнем уровне:
    if (...) {  const FOO = 'BAR'; // Неверно } // но if (...) {  define('FOO', 'BAR'); // Верно }

    Зачем нам в принципе может понадобится такое делать? Одно часто используемое применение состоит в том, чтобы проверять объявлена ли константа или еще нет:

    if (!defined('FOO')) {  define('FOO', 'BAR'); }
  • const принимает только статические значения (число, строку или другие постоянные величины, такие как правда, ложь, null, __FILE__), в то время как define() может принимать любые выражения. Начиная с PHP 5.6 выражения в качестве констант доступны также и в const:
    const BIT_5 = 1 << 5; // Верно начиная с PHP 5.6, до этой версии неверно  define('BIT_5', 1 << 5); // Всегда верно
  • const может быть присвоено только чётко определенное имя, в то же время define() принимает любое выражение в качестве имени. Этот факт позволяет делать вещи наподобие таких:
    for ($i = 0; $i < 32; ++$i) {  define('BIT_' . $i, 1 << $i); }
  • const всегда чувствительна к регистру, тогда как define() позволяет задавать нечувствительность к регистру, путем передачи значения «true» третьим параметром:
    define('FOO', 'BAR', true); echo FOO; // BAR echo foo; // BAR

Это была негативная «сторона медали». Теперь давайте посмотрим на причины, по которым лично я всегда использую const, если не возникает ни одной из вышеперечисленных ситуаций:

  • const просто легче читается. Это языковая конструкция а не функция, а также она совпадает с тем, как мы объявляем константы в классах.
  • const объявляет константу в соответствующем пространстве имен, тогда как в define() нужно передавать полное название пространства имен:
    namespace ABC; // Определение константы ABCFOO: const FOO = 'BAR'; define('ABCFOO', 'BAR');
  • Начиная с PHP 5.6 константы, объявленные при помощи сonst могут быть массивами, в то время как define() пока не поддерживает массивов. Хотя в PHP7 массивы будут поддерживаться обоими типами объявлений
    const FOO = [1, 2, 3]; // Верно для PHP 5.6 define('FOO', [1, 2, 3]); // Неверно для PHP 5.6, верно для PHP 7.0
  • Так как const это языковая конструкция и инициализируется она на этапе компиляции, такие константы несколько быстрее чем константы типа define().

    Хорошо известно, что define()ы медлительны, если используется большое количество констант. Люди даже изобрели такие вещи как apc_load_constants() и hidef чтобы обойти этот недостаток

    const инициализирует константы приблизительно в два раза быстрее (На машинах для разработки с включённым XDebug даже больше). С другой стороны, время поиска не меняется (поскольку оба типа констант делят одну таблицу поиска )

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

class Foo {  const BAR = 2; // valid } // but class Baz {  define('QUX', 2); // invalid }

Подытоживая:
За исключением случаев динамического объявления или же объявления в виде выражения, используйте const вместо define() просто по причине лучшей читаемости!

fkn.ktu10.com


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector