$a = 'y';
$a++;
echo $a;
++$a;
echo $a;
$a+=1;
echo $a;
$a = $a+1;
echo $a;
Что будет на экране?
array (1, '4' => 1, 'a' => 1, 1);
Вопрос: сможете ли вы, не запуская PHP, сказать какой индекс будет у последнего элемента?
$a = '11';
$b = 'a';
$c = 2;
$a < $b; // true или false?
$b < $c; // true или false?
$c < $a; // true или false?
$str = '2 3 4';
echo $str{$str};
Что будет на экране?
Даны два массива (специально вывожу индексы, буквы латинские):
$a = array (0 => 1, 'a' => 1, 1 => 1, 'b' => 1, 2 => 1, 'c' => 1);
$b = array (0 => 1, 'a' => 1, 'b' => 1, 2 => 1);
К каждому применили функцию ksort:
ksort($a);
ksort($b);
Вопрос: В каком порядке будут распологаться ключи массива $a и $b после применения функции ksort?
$var = strval(TRUE-TRUE);
echo empty($var) ? 'empty' : 'full';
Что выведет оператор 'echo' и почему я не подставил первую строку сразу в empty?
echo floor((0.1+0.7)*10);
Что будет на экране?
Загадка на static и unset. Дано:
function s()
{
static $a = 1;
echo $a++;
unset ($a);
}
array (s(), s());
Что будет на экране?
$a = 0;
var_dump ('all' != $a);
Что будет на экране?
19.07.2008
так и не понял почему здесь будет 7...
echo floor((0.1+0.7)*10);
а тут будет тройка
$str = '2 3 4';
echo $str{$str};
Что будет на экране?
Размерность дробных чисел зависит от операционной системы. Обычная максимальная точность доходит до ~1.8е308, что позволяет использовать до 14 десятичных значащих разрядов (64 бита в формате IEEE). В процессе арифметических преобразований неизбежна потеря точности. Например, выражение floor((0.1+0.7)*10) возвратит 7 вместо ожидаемого значения 8, потому что ((0.1+0.7)*10) = 7,99999999... Также невозможно точное сопоставление иррациональных чисел. Поэтому нельзя доверять точности последней цифры дробных чисел и нельзя сравнивать их без округления. Если требуется более высокая точность вычислений, следут использовать функции GMP или BCMath.
а во втором примере почему будет тройка?
$str{$str};
Эта запись означает взять символ с номером $str в строке $str. Этот номер $str должен быть целым числом, т.е. идет преобразование из строки в число.
Конвертация строк в числа в PHP
Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Верное числовое значение - это одна или более цифр (могущих содержать десятичную точку), по желанию предваренных знаком, с последующим необязательным показателем степени. Показатель степени - это 'e' или 'E' с последующими одной или более цифрами.
$foo = 1 + "10.5"; // $foo это float (11.5)
$foo = 1 + "-1.3e3"; // $foo это float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo это integer (1)
$foo = 1 + "bob3"; // $foo это integer (1)
$foo = 1 + "3bob"; // $foo это integer (4)
$foo = 1 + "10 Small Pigs"; // $foo это integer (11)
$foo = "10.0 pigs " + 1; // $foo это float (11)
$foo = "10.0 pigs " + 1.0; // $foo это float (11)
Короче говоря php преобразует строку '2 3 4' в число 2, т.к после первого символа "2" идет пробел и на этом php останавливается.
Ну а дальше все ясно: берем 2 символ из строки '2 3 4', но т.к. нумерация в строках начинается с нуля (как в массивах), то этим числом будет 3!
$str = '2 3 4';
echo $str{2}; // равно 3
echo floor((0.1+0.7)*10); // будет 7
Вычисления с дробными числами могут происходить с потерей точности. Это связано с невозможностью точно выразить некоторые дроби в десятичной системе счисления конечным числом цифр. Например, 1/3 в десятичной форме принимает вид 0.3333333
Кстати, в MySQL для хранения денег существует тип DECIMAL (данные хранятся в виде строки, потерь в точности не происходит). А если деньги хранить в FLOAT, то можно обнаружить, что деньги "утекают":)
спасибо за разъяснение :)
оказывается нифига не знаю пыху :)
значит unset не удаляет статик переменные? o_O
плизз помогите с задачей на тему конструктор.
Описать две переменные и выявить наибольшую из них :((
не понял про static) почему все-таки выводится 12
все нашел ответ в мануале на сайте php) просто в функции unset статической переменной удаляет только локально, то есть в самой функции, если вызвать функцию еще раз то она воостановит предыдущее значение статик переменной)