Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
// Начальная переменная со строкой в 1000 символов
$a0 = str_repeat('*', 1000);
// Создаем 1000 переменных
extract(range(1, 1000), EXTR_OVERWRITE, 'a');
// Исходное потребление памяти
echo memory_get_usage() . '<br />';
// Копируем по значению
for($i = 1; $i < 1000; $i++) {
${'a' . $i} = $a0;
}
// Память остается прежней
echo memory_get_usage() . '<br />';
// Создаем ту-же строку с нуля
for($i = 1; $i < 1000; $i++) {
${'a' . $i} = str_repeat('*', 1000);
}
// Потребление памяти увеличивается в разы
echo memory_get_usage() . '<br />';
$a_0 = str_repeat('*', 1000);
extract(array_combine(range(1, 1000), array_fill(1, 1000, null)), EXTR_PREFIX_ALL, 'a');
echo memory_get_usage() . '<br />';
for($i = 1; $i < 1000; $i++) {
${'a_' . $i} = $a_0;
}
echo memory_get_usage() . '<br />';
for($i = 1; $i < 1000; $i++) {
${'a_' . $i} = str_repeat('*', 1000);
}
echo memory_get_usage() . '<br />';
switch ($var)
{
case 1:
# some code
break;
case 2:
# one more
break;
case 3:
default:
# code block
break;
}
if ($var == 1)
{
# some code
}
elseif ($var == 2)
{
# one more
}
else
{
# code block
}
$array = array('string', 1, '4', 8, 'second', 'word', 12, '42');
function valuesToInt(array $array = array())
{
foreach ($array as &$value)
{
if (!is_int($value))
{
$value = (int) $value;
}
}
return $array;
}
$arrayOnlyIntValues = valuesToInt($array);
unset($value);
$arrayOnlyIntValues = array_map(function($value) {
if (is_int($value)) {
return $value;
} else {
return (int) $value;
}
}, $array);
$arrayOnlyIntValues = array_map("intval", $array);
array_walk($array, function(&$value) {
$value = intval($value);
});
// $array === $arrayOnlyIntValues
$arrayOnlyIntValues = array_map(function($value) {
return (int) $value;
}, $array);
Причем переменные объектного типа и объекты в Java — совершенно разные сущности. Переменные объектного типа являются ссылками, то есть неявными указателями на динамически создаваемые объекты.
Кроме того, в C# решено было перенести некоторые возможности C++, отсутствовавшие в Java: ... передача параметров в метод по ссылке... Также в C# оставили ограниченную возможность работы с указателями
$a = 10; // выделяем область в памяти, одна ссылка
$b = $a; // две ссылки
$b = 1; // выделяем вторую область в памяти под значение 1, одна ссылка на 1, одна ссылка на 10
Использовать var_dump, вместо print_r, и обращать внимание на амперсанд. Чтобы дампить в файл, а не в браузер, альтернативой print_r($var,true) будет такая конструкция:
var_export($var,true)
По умолчанию, переменные всегда присваиваются по значению. То есть, когда вы присваиваете выражение переменной, все значение оригинального выражения копируется в эту переменную.
foreach ($newitems as $key=>$item)
обещали сделать deprecated foreach ($array => &$item)
foreach($new as $key => $value)
$new[$key] = $value+2;
Подводный камень в foreach($items as &$item)