Константы в php

Содержание

Содержание:

  • HTML
    • Что такое HTML
    • <!DOCTYPE>
    • Мета теги в <head>
    • Тег <base>
    • Текст в html
    • HTML списки
    • Ссылки
    • Картинки на сайте
    • Таблицы
    • Фреймы
    • Формы
    • DHTML
    • Музыка
    • Видео
    • Карты изображений
    • SVG карты
    • Графика в HTML
    • SSI .shtml
    • Таблица цветов RGB
    • Правильноесочетание цветов
    • Таблица«безопасных»цветов
    • Таблица символов
    • Примеры HTML, CSS
  • CSS
    • Таблицы стилей CSS
    • Свод стилей
    • Псевдоклассы CSS
    • Псевдоэлементы CSS
    • CSS-градиент
    • Flexbox
    • Адаптивная верстка
    • @media screen
  • JavaScript
    • Описание языка
    • Методы и функции
    • Объекты
    • Строки
    • Формы
    • Фреймы и окна
    • Регулярныевыражения
    • Условнаякомпиляция
    • Примеры скриптов
    • Отладка
    • Оптимизация
    • Игры на JS
    • CSS из JS
  • PHP + MySQL
    • Введение в PHP
    • Основы языка
    • Использованиемассивов
    • $_server
    • Создание функций
    • Строки
    • Функции работысо строками
    • Объектноепрограммирование
    • Формы
    • Файлы
    • Загрузка файлов на сервер
    • MySQL
      • Дата, время MySQL
      • Вопросы по MySQL
    • Cookie
    • htaccess
    • Безопасность
    • Сессии
    • Отправка почты
    • Кэширование
    • Дата, время
    • Математическиефункции
    • Дополнительныевозможности
    • Регулярныевыражения
    • Библиотека Curl
    • IMAP, POP3, NNTP
    • Оптимизация
    • Примеры скриптов
  • XML + XSLT
  • AJAX
    • Знакомство с Ajax
    • ОбъектXMLHttpRequest
    • СозданиеAjax-приложения
    • Отправка формы
    • Области применения
    • Ajax примеры
    • АльтернативныеAjax-у методы
    • Ошибки Ajax
    • Навигация на AJAX
  • Графика CorelDRAW
    • Типы графики
    • Пакет CorelDRAW GS
    • Зимняя картинка
    • Осколок стекла
  • SEO
    • Анализ сайта
    • WEB продвижение(оптимизация)
    • Информацияо домене
    • Информация обIP-адресе
    • Ping поисковыхсистем
    • Robots.txt
    • meta Robots
    • Каталоги ипоисковики
    • Особенности SAPE
    • Page Rank
    • Сервис созданияссылок
    • О Контекстнойрекламе
  • Сервисы
  • Разное
    • Движки сайтов (CMS)
    • Хостинг
    • Настройка DNS
    • ADSL
    • RSS
    • ActiveX и HTML
    • Паролированиестраницы
    • HTTP коды
    • HTTP протокол
    • HTTP заголовки
    • Прячем ссылки
    • Черный списоксайтов
    • ☭ Заработокв интернете
    • Термины иопределения
    • Продажа доменов
    • НастройкиЯндекс-почты
    • Кнопки социалок
    • Настроки SIPв телефоне
    • Созданиепоискового плугина
    • Сервискоротких ссылок
    • Telegram: бот, ссылки.
    • Друзья
    • Статьи Liex
    • Задания к л/р
    • Примерызачетных задач
  • Статьи, обзоры
    • Шаблоны сайтов
    • Новости

Syntax

You can define a constant by using the define()-function or by using the const keyword outside a class definition as of PHP 5.3.0. While define() allows a constant to be defined to an arbitrary expression, the const keyword has restrictions as outlined in the next paragraph. Once a constant is defined, it can never be changed or undefined.

When using the const keyword, only scalar data (boolean, integer, float and string) can be contained in constants prior to PHP 5.6. From PHP 5.6 onwards, it is possible to define a constant as a scalar expression, and it is also possible to define an array constant. It is possible to define constants as a resource, but it should be avoided, as it can cause unexpected results.

You can get the value of a constant by simply specifying its name. Unlike with variables, you should not prepend a constant with a $. You can also use the function constant() to read a constant’s value if you wish to obtain the constant’s name dynamically. Use get_defined_constants() to get a list of all defined constants.

If you use an undefined constant, PHP assumes that you mean the name of the constant itself, just as if you called it as a string (CONSTANT vs «CONSTANT»). This fallback is deprecated as of PHP 7.2.0, and an error of level is issued when it happens (previously, an error of level E_NOTICE has been issued instead.) See also the manual entry on why is wrong (unless you first define() bar as a constant). This does not apply to (fully) qualified constants, which will raise a fatal error if undefined. If you simply want to check if a constant is set, use the defined() function.

These are the differences between constants and variables:

  • Constants do not have a dollar sign ($) before them;
  • Prior to PHP 5.3, Constants may only be defined using the define() function, not by simple assignment;
  • Constants may be defined and accessed anywhere without regard to variable scoping rules;
  • Constants may not be redefined or undefined once they have been set; and
  • Constants may only evaluate to scalar values. As of PHP 5.6 it is possible to define array constant using const keywords and as of PHP 7 array constants can also be defined using define() You may use arrays in constant scalar expressions (for example, const FOO = array(1,2,3);), but the end result must be a value of allowed type.

Example #1 Defining Constants


Example #2 Defining Constants using the const keyword

See also Class Constants.

New features

Constant expressions

It is now possible to provide a scalar expression involving numeric and string literals and/or constants in contexts where PHP previously expected a static value, such as constant and property declarations and default function arguments.

It is also now possible to define a constant array using the const keyword:

Argument unpacking via …

Arrays and Traversable objects can be unpacked into argument lists when calling functions by using the … operator. This is also known as the splat operator in other languages, including Ruby.

Exponentiation via **

A right associative ** operator has been added to support exponentiation, along with a **= shorthand assignment operator.

use function and use const

The use operator has been extended to support importing functions and constants in addition to classes. This is achieved via the use function and use const constructs, respectively.

phpdbg

PHP now includes an interactive debugger called phpdbg implemented as a SAPI module. For more information, please visit the phpdbg documentation.

Default character encoding

is now used as the default character set for the htmlentities(), html_entity_decode() and htmlspecialchars() functions. Note that if the (now deprecated) iconv and mbstring encoding settings are set, they will take precedence over default_charset for iconv and mbstring functions, respectively.

The default value for this setting is UTF-8.

is reusable

may now be reopened and read as many times as required. This work has also resulted in a major reduction in the amount of memory required to deal with POST data.

GMP supports operator overloading

GMP objects now support operator overloading and casting to scalar types. This allows for more expressive code using GMP:

hash_equals() for timing attack safe string comparison

The hash_equals() function has been added to compare two strings in constant time. This should be used to mitigate timing attacks; for instance, when testing crypt() password hashes (assuming that you are unable to use password_hash() and password_verify(), which aren’t susceptible to timing attacks).

__debugInfo()

The magic method has been added to allow objects to change the properties and values that are shown when the object is output using var_dump().

gost-crypto hash algorithm

The gost-crypto hash algorithm has been added. This implements the GOST hash function using the CryptoPro S-box tables as specified by » RFC 4357, section 11.2.

SSL/TLS improvements

A wide range of improvements have been made to the SSL/TLS support in PHP 5.6. These include , supporting certificate fingerprint matching, mitigating against TLS renegotiation attacks, and many new SSL context options to allow more fine grained control over protocol and verification settings when using encrypted streams.

These changes are described in more detail in the OpenSSL changes in PHP 5.6.x section of this migration guide.

pgsql async support

The pgsql extension now supports asynchronous connections and queries, thereby enabling non-blocking behaviour when interacting with PostgreSQL databases. Asynchronous connections may be established via the constant, and the new pg_connect_poll(), pg_socket(), pg_consume_input() and pg_flush() functions may be used to handle asynchronous connections and queries.

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

Объявляются только с помощью . Правила для них такие как описано выше: принимают только скаляры, не понимают PHP переменные, функции, выражения…

Объявленная константа принадлежит именно классу, она не принадлежит ни одному объекту и является общей на всех объектов (экземпляров) класса.

class My_Class {

	const NAME = 'VALUE';

	// начиная с PHP 5.6 можно использовать математические выражения
	const SEC_PER_DAY = 60 * 60 * 24;

	function print_name() {
		// обращение к константе класса внутри метода через self (сам класс)
		echo self::NAME;
	}
}

// обращение к константе вне класса
// можно вызывать из глобальной области видимости без инициализации экземпляра класса
echo My_Class::NAME;

Постоянные класса всегда общедоступны — нет статуса или . Однако с версии PHP 7.1 константам класса можно указать модификатор:

class Foo {
	// Начиная с PHP 7.1.0
	public const BAR = 'bar';
	private const BAZ = 'baz';
}

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

class My_Class {
	const NAME = 'VALUE';
	static $name = 'VALUE';
}

echo My_Class::NAME;
echo My_Class::$name;

Константные массивы

Именованные константы — очень ценный инструмент в PHP. Одним из распространенных вариантов использования является улучшение читаемости кода путем предоставления семантических имен произвольным данным, таким как цвета, значениям RGB или магическим номерам в коде, которые неоднозначны и могут сбить с толку в других случаях. Любой, кто работал с PHP долгое время, скорее всего, видел приложение с файлом констант (или даже несколькими файлами), которое содержит десятки, если не сотни именованных констант, требующих длинных и описательных имен, чтобы избежать конфликтов имен.

Именованные константы, в дополнение к ранее поддерживаемым типам данных, могут быть как индексированным так и ассоциативным массивом. Это поможет более точно сгруппировать многие именованные константы, которые могут быть у вас в вашем приложении.

«Волшебные» константы

И в заключении вспомним про особые константы PHP…

В PHP есть девять волшебных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, значение зависит от строки в скрипте, на которой эта константа указана. Все «волшебные» константы разрешаются во время компиляции, в отличии от обычных констант, которые разрешаются во время исполнения. Специальные константы нечувствительны к регистру и их список приведен ниже:

Константа Описание
Текущий номер строки в файле.
Полный путь и имя текущего файла, в котором вызывается константа.
PHP 5.3.0. Директория файла, в котором используется константа. То же самое что . Не имеет слэша в конце, кроме корневой директории.
Имя функции.
Имя класса. Это имя содержит название пространства имен, в котором класс был объявлен (например, Foo\Bar). Также работает в трейтах. При использовании в методах трейтов является именем класса, в котором эти методы используется.
PHP 5.4.0. Имя трейта. Это имя содержит название пространства имен, в котором трейт был объявлен (например, Foo\Bar).
Имя метода класса.
PHP 5.3.0. Имя текущего пространства имен.
PHP 5.5.0. Полное имя класса (с указанием пространства имен). Также смотрите ::class.

Скалярный параметр и возврат заявленного типа

PHP имел объявления типов и до 7 версии, но ограничивался только объектами и массивами. PHP7 теперь обеспечивает поддержку всех скалярных типов и предлагает два разных объявления типов.

Принудительный:

это тип объявления по умолчанию и просто означает, что среда выполнения PHP будет пытаться приводить значения, когда это необходимо. Возьмем, к примеру, следующий код.

Мы указываем, что параметр должен иметь тип а также возвращаемое значение также должно иметь тип . Поэтому, когда мы передаем число 1234, оно принудительно переводится в строку «1234» и переводится без ошибок.

Строгий:

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

Добавив единую инструкцию в самом начале файла, в тот же код, что и раньше, теперь мы получаем следующее сообщение об ошибке:

Маленькое дополнение: когда вы включаете строгий режим, это также распространяется на встроенные функции и функциям PHP загружаемым из расширений.

FAQ: things you need to know about namespaces

(PHP 5 >= 5.3.0, PHP 7)

This FAQ is split into two sections: common questions, and some specifics of implementation that are helpful to understand fully.

First, the common questions.

There are a few implementation details of the namespace implementations that are helpful to understand.

If I don’t use namespaces, should I care about any of this?

No. Namespaces do not affect any existing code in any way, or any as-yet-to-be-written code that does not contain namespaces. You can write this code if you wish:

Example #1 Accessing global classes outside a namespace

This is functionally equivalent to:

Example #2 Accessing global classes outside a namespace

How do I use namespaces classes, functions, or constants in their own namespace?

How does a name like \my\name or \name resolve?

Names that begin with a \ always resolve to what they look like, so \my\name is in fact my\name, and \Exception is Exception.

Example #5 Fully Qualified names

How does a name like my\name resolve?

Names that contain a backslash but do not begin with a backslash like my\name can be resolved in 2 different ways.

If there is an import statement that aliases another name to my, then the import alias is applied to the my in my\name.

Otherwise, the current namespace name is prepended to my\name.

Example #6 Qualified names

How does an unqualified class name like name resolve?

Class names that do not contain a backslash like name can be resolved in 2 different ways.

If there is an import statement that aliases another name to name, then the import alias is applied.

Otherwise, the current namespace name is prepended to name.


Example #7 Unqualified class names

How does an unqualified function name or unqualified constant name like name resolve?

Function or constant names that do not contain a backslash like name can be resolved in 2 different ways.

First, the current namespace name is prepended to name.

Finally, if the constant or function name does not exist in the current namespace, a global constant or function name is used if it exists.

Example #8 Unqualified function or constant names

Import names must not conflict with classes defined in the same file.

The following script combinations are legal:

There is no name conflict, even though the class MyClass exists within the my\stuff namespace, because the MyClass definition is in a separate file. However, the next example causes a fatal error on name conflict because MyClass is defined in the same file as the use statement.

PHP does not allow nesting namespaces

However, it is easy to simulate nested namespaces like so:

Before PHP 5.6 neither functions nor constants can be imported via the use statement.

Before PHP 5.6 the only elements that are affected by use statements are namespaces and class names. In order to shorten a long constant or function, import its containing namespace.

As of PHP 5.6 aliasing or importing function and constant names is allowed.

Dynamic namespace names (quoted identifiers) should escape backslash

It is very important to realize that because the backslash is used as an escape character within strings, it should always be doubled when used inside a string. Otherwise there is a risk of unintended consequences:

Example #9 Dangers of using namespaced names inside a double-quoted string

Inside a single-quoted string, the backslash escape sequence is much safer to use, but it is still recommended practice to escape backslashes in all strings as a best practice.

Undefined Constants referenced using any backslash die with fatal error

Any undefined constant that is unqualified like FOO will produce a notice explaining that PHP assumed FOO was the value of the constant. Any constant, qualified or fully qualified, that contains a backslash will produce a fatal error if not found.

Example #10 Undefined constants

Cannot override special constants NULL, TRUE, FALSE, ZEND_THREAD_SAFE or ZEND_DEBUG_BUILD

Any attempt to define a namespaced constant that is a special, built-in constant results in a fatal error

Example #11 Undefined constants

Константы в PHP

Встречаются случаи, когда переменные довольно неудобно использовать для постоянного хранения каких либо определенных значений, которые не меняются в течение работы программы. Такими значениями могут быть математические константы, пути к файлам, разнообразные пароли и.т.д. Как раз для этих целей в PHP предусмотрена такая конструкция, как .

называется именованная величина, которая не изменяется в процессе выполнения программы (скрипта).

В отличие от переменных, вы не можете изменять значения констант, которые были им присвоены при их объявлении. Константы удобно использовать для хранения значений, которые не должны изменяться во время работы программы. Константы могут содержать только скалярные данные (логического, целого, плавающего и строкового типов).

В РНР константы определяются функцией define(). Эта функция имеет следующий формат:

Пример определения и использования констант в PHP:

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

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

Различия между константами и переменными:

  • У констант нет приставки в виде знака доллара ($);

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

  • Константы могут быть определены и доступны в любом месте без учета области видимости;

  • Константы не могут быть определены или аннулированы после первоначального объявления;

  • Константы могут иметь только скалярные значения.

Проверка существования констант

Для проверки существования константы можно использовать функцию defined(). Данная функция возвращает true, если константа объявлена. Приведем пример:

Предопределенные константы PHP


В PHP существуют следующие предопределенные константы:

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

Есть пять предопределенных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, константа __LINE__ зависит от строки в скрипте, на которой эта константа указана. Специальные константы нечувствительны к регистру и их список приведен ниже:

Имя
Описание
__LINE__
Текущая строка в файле.
__FILE__
Полный путь и имя текущего файла.
__DIR__
The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(__FILE__). This directory name does not have a trailing slash unless it is the root directory.
__FUNCTION__
Имя функции. (Добавлена в PHP 4.3.0.)
__CLASS__
Имя класса. (Добавлена в PHP 4.3.0.)
__TRAIT__
The trait name. The trait name includes the namespace it was declared in (e.g. Foo\Bar).
__METHOD__
Имя метода класса. (Добавлена в PHP 5.0.0)
__NAMESPACE__
The name of the current namespace.

Дополнительно

Полный список стандартных констант PHP
Список объявленных в ядре PHP констант
 <<< Назад (Суперглобальные переменные PHP) 
 Вперед >>> (Выражения в PHP ) 
Есть еще вопросы или что-то непонятно — добро пожаловать на наш  форум портала PHP.SU 
 

Если перемещение вызова jQuery не помогло

Про­верь­те, отку­да вы берё­те биб­лио­те­ку jQuery. Может быть, вы берё­те её с уда­лён­но­го сай­та, до кото­ро­го ваш бра­у­зер не может дозво­нить­ся (Рос­ком­над­зор поста­рал­ся или про­сто сайт лежит). Тогда ска­чай­те jQuery на ком­пью­тер и вызо­ви­те локаль­но:

<script src=»script/jquery.min.js»></script> <!—при этом не забудьте скачать и положить сюда библиотеку jQuery—><script src=»ВАШ СКРИПТ»></script>

Про­стой спо­соб убе­дить­ся, что jQuery загру­жа­ет­ся нор­маль­но, — ско­пи­ро­вать её адрес из кода и вста­вить в адрес­ную стро­ку бра­у­зе­ра. Если вам выве­дет­ся про­грамм­ный код, зна­чит, jQuery вам доступ­на и загру­жа­ет­ся. Если что-то пой­дёт не так — вы уви­ди­те это на экране.

Напри­мер, попро­буй­те перей­ти по этой ссыл­ке: https://yastatic.net/jquery/3.3.1/jquery.min.js — если она у вас откры­ва­ет­ся и вы види­те меси­во из кода, зна­чит, jQuery для вас откры­лась.

Объясните подробнее!

Знак $ в JavaScript — это назва­ние сущ­но­сти, через кото­рую мы дела­ем все­воз­мож­ные запро­сы с помо­щью jQuery.

jQuery — это допол­ни­тель­ная биб­лио­те­ка, кото­рая упро­ща­ет рабо­ту с эле­мен­та­ми на веб-странице. Напри­мер, если нам нуж­но с помо­щью JavaScript на лету поме­нять какую-то над­пись на стра­ни­це, то без jQuery нам бы при­шлось сде­лать так:

document.getElementById(‘someElement’).innerHTML=’Some New Text’;

А через jQuery всё то же самое дела­ет­ся так:

$(«#someElement»).html(«Some New Text»);

Знак дол­ла­ра при отлад­ке JS (то есть в кон­со­ли) — при­знак того, что в коде исполь­зу­ет­ся jQuery, это её фир­мен­ный знак.

jQuery настоль­ко рас­про­стра­не­на, что на её осно­ве уже дела­ют дру­гие биб­лио­те­ки: все­воз­мож­ные гале­реи, пере­клю­чал­ки, интер­фейс­ные шту­ки, фор­мы и т. д. Что­бы такие биб­лио­те­ки рабо­та­ли, сна­ча­ла в бра­у­зе­ре долж­на быть загру­же­на сама jQuery, а уже потом — нуж­ная вам биб­лио­те­ка.

Тех­ни­че­ски с точ­ки зре­ния бра­у­зе­ра $ — это про­сто объ­ект в язы­ке JavaScript. У него есть мето­ды, кото­рые долж­ны быть про­пи­са­ны, преж­де чем бра­у­зер смо­жет их испол­нить. И если на момент вызо­ва этих мето­дов они не были нигде про­пи­са­ны, бра­у­зер спра­вед­ли­во воз­му­тит­ся. А они не будут про­пи­са­ны толь­ко в одном слу­чае: при загруз­ке jQuery что-то пошло не так.

Воз­мож­ные при­чи­ны неза­груз­ки jQuery:

  • Её про­сто забы­ли доба­вить в код.
  • Она загру­жа­ет­ся с уда­лён­но­го сай­та, кото­рый сей­час для вас недо­сту­пен. Отклю­чён интер­нет, сайт лежит, забло­ки­ро­ван или в его адре­се опе­чат­ка.
  • При загруз­ке что-то пошло не так, и вме­сто jQuery при­ле­те­ло что-то дру­гое.
  • Уже после загруз­ки jQuery какой-то дру­гой скрипт пере­опре­де­лил объ­ект $ (и всё сло­мал).
  • Бра­у­зер запре­тил загруз­ку скрип­та с дру­го­го сай­та.
  • Она загру­жа­ет­ся после того, как её вызы­ва­ют (а не до).
  • Загру­жа­ет­ся какая-то испор­чен­ная вер­сия jQuery (мало­ве­ро­ят­но).

Как создавать константы

PHP меньше 5.3

До 5.3 в PHP, константы можно было определять только через . Ключевое слово появилось с версии 5.3.

// скаляры
define( 'FOO', 10 );
define( 'FOO', 10.9 );
define( 'FOO', 'val' );
define( 'FOO', true );

// не скаляры
define( 'FOO', array(1) );          // константа не установиться и получим Warning
define( 'FOO', (object) array(1) ); // константа не установиться и получим Warning

С версии PHP 5.3


Появилось ключевое слово и теперь константу можно определять еще и с помощью него.

Однако, в нельзя указать переменную, функцию или какое то выражение, а нужно передавать скаляр «напрямую»:

const FOO = 'val';       // нет ошибок
const FOO = $var;        // Parse error
const FOO = home_url();  // Parse error
const FOO = 5 + 10;      // Parse error
const FOO = 'foo'.'bar'; // Parse error

Тогда как для таких ограничений нет…

define('FOO', 'val');         // нет ошибок
define('FOO', $var );         // нет ошибок
define('FOO', home_url() );   // нет ошибок
define('FOO', 5 + 10 );       // нет ошибок
define('FOO', 'foo'.'bar' );  // нет ошибок

PHP 5.6

Стало возможным указывать в значения примитивные PHP выражения (выражения из скаляров):

const FOO = 1 + 2;
const FOO = 'foo' . 'bar';

Стало возможным хранить массивы в константах:

const FOO = ;      // работает

define( 'FOO',  ); // не работает PHP 5.6, работает в PHP 7.0

PHP: Удаление элементов массива

Перед нами стоит тривиальная с виду задача: удалить элемент массива. Или несколько элементов.

Однако, при всей ее простоте, в ней есть варианты, которые не совсем очевидны, и о которых стоит знать, если вы хотите продвинуться в PHP чуть дальше, чем «Hello, world!»:)

Начнем с самой базы: чтобы удалить один элемент, нужно воспользоваться функцией unset():


unset($array);
unset($array);

Здесь все просто и понятно.

Дальше. Для удаления нескольких несмежных элементов также используется функция unset(), просто мы передаем ей несколько параметров:


unset($array, $array);
unset($array, $array);

Следующий логичный вопрос: как удалить несколько элементов, которые следуют друг за другом (т.е. смежных)? Чтобы удалить несколько смежных элементов, воспользуйтесь функцией array_splice():


array_splice($array, $offset, $length);

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


$array = $array = '';

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

Если вы работаете с числами, вероятно, лучше будет связать с таким ключом значение 0.

Скажем, если компания прекратила производство деталей модели HBL-568, то в массив деталей можно внести изменение:


unset($products);

Если же детали HBL-568 нет на складе лишь временно и ожидается ее поступление с завода, то лучше поступать иначе:


$products = 0;

Следующий момент, который нужно понимать, заключается в том, что при вызове функции unset() для элемента массива, PHP корректирует массив так, чтобы цикл по-прежнему работал правильно.

Иными словами, массив не сжимается для заполнения образовавшихся «дыр». По сути, это означает, что все массивы являются ассоциативными, даже если на первый взгляд кажутся числовыми. Давайте посмотрим на понятные примеры для иллюстрации этого поведения:


// Создание "числового" массива
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
print $animals;  // Выводит 'bee'
print $animals;  // Выводит 'cat'
count($animals);    // Возвращает 6


// unset()
unset($animals); // Удаляет элемент $animals = 'bee'
print $animals;  // Ничего не выводит и выдает ошибку E_NOTICE
print $animals;  // Выводит 'cat'
count($animals);    // Возвращает 5 при том, что элемент $array остается на месте и содержит 'fox'


// Добавление нового элемента
$animals[] = 'gnu'; // Добавляет новый элемент
print $animals;  // Ничего не выводит, также выдает ошибку E_NOTICE
print $animals;  // Выводит 'gnu'
count($animals);    // Возвращает 6


// Присваивание '' (пустой строки)
$animals = '';   // Устанавливается значение "пустая строка"
print $animals;  // Выводит ''
count($animals);    // Возвращает 6, т.е. учитывает пустой элемент массива при подсчете

Чтобы перейти к плотно заполненному числовому массиву, воспользуйтесь функцией array_values():


$animals = array_values($animals);

Также функция array_splice() автоматически переиндексирует массивы для устранения «дыр»:


// Создание "числового" массива
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
array_splice($animals, 2, 2);
print_r($animals);

На выходе получим:


Array
(
     => ant
     => bee
     => elk
     => fox
)

Где может пригодиться такая возможность?

Допустим, вы работаете с массивом как с очередью и хотите из этой очереди удалить элементы, не теряя при этом возможности произвольного доступа, когда вы могли бы случайно попасть в одну из образовавшихся «дыр».

Ну и, наконец, для безопасного удаления первого или последнего элемента из массива используются функции array_shift() и array_pop() соответственно.

С ними все очень просто:


$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);

В результате выполнения кода выше мы получим такой вывод:


Array
(
     => banana
     => apple
     => raspberry
)

Для удаления последнего элемента воспользуемся функцией array_pop():


$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
print_r($stack);

На выходе получим следующую распечатку массива:


Array
(
     => orange
     => banana
     => apple
)

На этом всё. Основные моменты по удалению элементов массива в PHP мы разобрали. Если что — официальная документация всегда в помощь.

Компиляция под Win32

Как известноExpress

  • Скомпилированные бинарники PHP 5.3, которые можно взять здесь,
  • Исходники PHP 5.3, которые можно скачать с сайта или вытянуть из общедоступного SVN,
  • Желание поэкспериментировать и немного терпения.
  • Щелкните правой кнопкой мыши в Solution Explorer’e и выберите Properties > C/C++ > General > Additional Include Directories. Сюда мы добавим директории, в которых лежат распакованные исходники и заголовочные файлы PHP. Конкретно нужны будут:
    php-5.3.6
    php-5.3.6\main
    php-5.3.6\TSRM
    php-5.3.6\Zend
    
  • Теперь добавим preprocessor definitions, которые нужны для корректного выбора платформы и компиляции модуля. Выбираем Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions, и добавляем туда следующее:
    PHP_WIN32
    ZEND_WIN32
    ZTS=1
    ZEND_DEBUG=0
    
  • Затем укажем линковщику где можно найти необходимые библиотеки. Выбираем Configuration Properties > Linker > General > Additional Library Directories. Там выбираем директорию \div из бинарников PHP. Должно получиться что-то такое: «D:\Program Files\php-5.3.6-Win32-VC9-x86\dev».
  • Теперь укажем конкретную либу для линковщика. Идем в Configuration Properties > Linker > Input > Additional Dependencies, и вписываем туда php5ts.lib, которая находится в той самой \dev директории, которую мы указали в предыдущем шаге.
  • Для избегания некоторых проблем компиляции, добавим директиву /FORCE:MULTIPLE в Configuration Properties > Linker > Command Line. Подробнее о ней можно прочитать на сайте MSDN.
  • И, наконец, можно указать, куда сохранять скомпилированную dll. Для этого перейдем в Configuration Properties > Linker > General > Output Filename и укажем там путь к папке \ext установленного PHP. Должно получиться что-нибудь такое: «D:\Program Files\php-5.3.6-Win32-VC9-x86\ext\$(ProjectName).dll».

Константы в PHP

Константой называется именованная величина, которая не изменяется в процессе выполнения программы.

В отличие от переменной, вы не можете изменить значение константы, которое было ей присвоено при её объявлении. Константы удобно использовать для хранения значений, которые не должны изменяться во время работы программы. Константы могут содержать только скалярные данные (логического, целого, плавающего и строкового типов).

В РНР константы определяются функцией define(). Эта функция имеет следующий формат:

Пример определения и использования констант в PHP:

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

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

Различия между константами и переменными:

  • У констант нет приставки в виде знака доллара ($);

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

  • Константы могут быть определены и доступны в любом месте без учета области видимости;

  • Константы не могут быть определены или аннулированы после первоначального объявления; и

  • Константы могут иметь только скалярные значения.

Проверка существования констант

Для проверки существования константы можно использовать функцию defined(). Данная функция возвращает true, если константа объявлена. Приведем пример:

Стандартные константы PHP

В PHP существуют следующие предопределенные константы:

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

Есть пять предопределенных констант, которые меняют свое значение в зависимости от контекста, в котором они используются. Например, константа __LINE__ зависит от строки в скрипте, на которой эта константа указана. Специальные константы нечувствительны к регистру и их список приведен ниже:

Имя
Описание
__LINE__
Текущая строка в файле.
__FILE__
Полный путь и имя текущего файла.
__DIR__
The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(__FILE__). This directory name does not have a trailing slash unless it is the root directory.
__FUNCTION__
Имя функции. (Добавлена в PHP 4.3.0.)
__CLASS__
Имя класса. (Добавлена в PHP 4.3.0.)
__TRAIT__
The trait name. The trait name includes the namespace it was declared in (e.g. Foo\Bar).
__METHOD__
Имя метода класса. (Добавлена в PHP 5.0.0)
__NAMESPACE__
The name of the current namespace.
 <<< Назад (Типы данных в PHP) 
 Вперед >>> (Выражения в PHP) 
Есть еще вопросы или что-то непонятно — добро пожаловать на наш  форум портала PHP.SU 
 

С этим читают