Возвращаемые функциями значения Учебник PHP

Массив может и не может

Почему $foo[bar] неправильно?

Вы всегда должны использовать кавычки вокруг индекса ассоциативного массива. Например, пишите $foo['bar'], а не $foo[bar]. Но почему не верна запись $foo[bar]? Вы могли встретить в старых скриптах такой синтаксис:

$foo[bar] = 'enemy'; echo $foo[bar]; // etc

Программное обеспечение ЭВМ разделяют на общее, или системное

Это неправильно, но работает. Тогда почему неправильно? Суть в том, что этот код содержит неопределённую константу (bar), а не строку 'bar' (обратите внимание на кавычки), и PHP может в дальнейшем определить константу, которая, к несчастью для вашего кода, имеет то же самое имя. Это работает, поскольку неопределённая константа конвертируется в строку с тем же именем. Испанская архитектура

Как указано в разделе синтаксис, между квадратными скобками ('[' и ']') должно иметься выражение. Это означает, что вы можете записать:

echo $arr[ foo(true) ];

Это пример использования return-значения функции в качестве индекса массива. PHP знает также и о константах, и вы можете увидеть спереди E_*. Искусство Тибета — страны в Центральной Азии, расположенной на Тибетском нагорье, — тесно связано с буддизмом. Буддизм распространился в Тибете в VII столетии, но наибольшее влияние приобрёл с XV—XVI вв. Светским и духовным правителем страны стал далай-лама («океан премудрости»). В Тибете в то время были возведены многочисленные монастыри. Анализ видов и кинетических параметров движений Равномерное движение Поступательным называют такое движение твердого тела, при котором всякая прямая линия на теле при движении остается параллельной своему начальному положению

$error_descriptions[E_ERROR] = "A fatal error has occured"; $error_descriptions[E_WARNING] 
= "PHP issued a warning"; $error_descriptions[E_NOTICE] = "This is just an informal 
notice";

Обратите внимание, что E_ERROR это такой же идентификатор, как и bar в первом примере. Но последний пример равносилен записи:

$error_descriptions[1] = "A fatal error has occured"; $error_descriptions[2] 
= "PHP issued a warning"; $error_descriptions[8] = "This is just an informal notice";

поскольку E_ERROR равна 1, etc.

Тогда как может работать $foo[bar]? Это работает, поскольку bar, по причине своего синтаксиса, ожидается как константное выражение. Однако в этом случае константа с именем bar не существует. PHP теперь принимает, что вы обозначили bar литерально как строку "bar", но что вы забыли указать кавычки.

Возвращаемые функциями значения TRUE/FALSE

Большая часть внутренних функций переписаны таким образом, чтобы возвращать TRUE при успехе и FALSE при неудаче, в отличие от 0 и -1 в PHP/FI 2.0, соответственно.
Это новое поведение даёт более логичный код вроде $fp = fopen("/your/file") or fail("darn!");. Поскольку в PHP/FI 2.0 не было чётких правил относительно того, что функции должны возвращать при неудаче, большая часть таких скриптов, должна, вероятно, быть проверена вручную после использования конвертера из 2.0 в 3.0.

Пример C-9. Миграция из 2.0: return-значения, старый код
$fp = fopen($file, "r"); if ($fp == -1); echo("Could not open $file 
for reading<br>\n"); endif;
Пример C-10. Миграция из 2.0: return-значения, новый код
$fp = @fopen($file, "r") or print("Could not open $file for reading<br>\n");

Числа с плавающей точкой

Числа с плавающей точкой ("float", "double" или "real") могут специфицироваться с использованием следующих видов синтаксиса:

$a = 1.234; $a = 1.2e3; $a = 7E-10;

Размер float зависит от платформы, хотя максимально возможна величина ~1.8e308 с точностью, грубо, 14 десятичных цифр (то есть 64 битный IEEE-формат).

Точность "с плавающей точкой"

Весьма часто простые дроби вроде 0.1 или 0.7 не могут конвертироваться в их внутренние двоичные представления без потери точности. Это может привести к парадоксальным результатам: например, floor((0.1+0.7)*10) обычно возвращает 7 вместо ожидаемого 8 как результат внутреннего представления приблизительного числа 7.9999999999....

Причиной является то, что невозможно точно выразить некоторые дроби в десятичной нотации конечным количеством цифр. Например, 1/3 в десятичной форме имеет вид 0.3333333...

Итак, никогда не полагайтесь на точность результата с плавающей точкой до последней цифры и никогда не проверяйте равенство чисел с плавающей точкой. Если вам нужна действительно высокая точность вычислений, вы должны использовать math-функции произвольной точности или gmp.

Целые числа

integer это число из набора Z = {..., -2, -1, 0, 1, 2, ...}

Синтаксис

Целые числа могут специфицироваться в десятеричной (база 10), 16-ричной (база 16) или 8-ричной (база 8) нотации с необязательным знаком (- или +).

Если вы используете 8-ричную нотацию, первым символом числа должен быть 0 (нуль), для 16-ричной нотации первыми символами числа будут 0x.
Пример 6-1. Целочисленные литералы
$a = 1234; # 10-ричное число $a = -123; # отрицательное число $a 
= 0123; # 8-ричное число (экивалентно 10-ричному 83) $a = 0x1A; # шестнадцатеричное 
число (экивалентно 10-ричному 26)

Размер integer зависит от платформы, хотя максимальное значение около 2 миллионов является обычным (то есть 32-битное знаковое). PHP не поддерживает беззнаковые integer.

Переполнение

Если вы специфицируете число за рамками диапазона типа integer, оно будет интерпретировано как float. Также, если вы выполняете операцию, которая даёт в результате число за пределами диапазона типа integer, будет возвращено float.

$large_number = 2147483647; var_dump($large_number); // на выходе: 
int(2147483647) $large_number = 2147483648; var_dump($large_number); // на выходе: 
float(2147483648) // это подходит также для специфицированных 16-ричных чисел: 
var_dump( 0x80000000 ); // на выходе: float(2147483648) $million = 1000000; $large_number 
= 50000 * $million; var_dump($large_number); // на выходе: float(50000000000)

Математика решение задач