Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var x = (12, 51);
alert(x); выведет 51. Запятая — это часть expression со своим приоритетом и поведением. $base_memory_usage = 0; // memory allocation
$base_memory_usage = memory_get_usage();<?php
echo memory_get_usage() . "\n";
$a = range(0, 100500);
echo memory_get_usage() . "\n";
foreach ($a as $k => $v)
{
if ($k == 0 || $k == 1 || $k == 100500) echo memory_get_usage() . "\n";
$a[$k] = 1;
}
Здесь написана какая-то хрень.
foreach($a as $k => $v) исходный массив копирует полностью при первом изменении (то же самое происходит при любой передаче «по значению» в функцию).
$a = new stdClass();
echo spl_object_hash($a); //000000007843f529000000002ad1ffeb
unset($a);
echo spl_object_hash(new stdClass()); //000000007843f529000000002ad1ffeb
<?php
class A {
public function __construct() {
echo ' [construct] ';
AllA::addHash(spl_object_hash($this));
}
}
class AllA {
static protected $_hashes = array();
static public function addHash($hash) {
self::$_hashes[] = $hash;
}
static public function getHashes() {
return self::$_hashes;
}
}
echo 'new A: '; $a = new A();
echo 'a hash: ', spl_object_hash($a), PHP_EOL; //new A: [construct] a hash: 000000001b77b1850000000057548e86
echo 'unset a', PHP_EOL;
unset($a);
echo 'object with no referance hash: ',
spl_object_hash(new A()), PHP_EOL;
//object with no referance hash: [construct] 000000001b77b1850000000057548e86
echo 'All hashes:', PHP_EOL, join(PHP_EOL, AllA::getHashes());
//здесь будут два одинаковых значения 000000001b77b1850000000057548e86
class asf{
public $asf = 1;
}
$a = new asf();
var_dump($a);
echo spl_object_hash($a).PHP_EOL; //00000000702b718*8*000000003d3a961b
var_dump($a); //object(asf)#*1* (1) {["asf"]=>int(1)}
unset($a);
$b = new stdClass();
echo spl_object_hash($b).PHP_EOL; //00000000702b718*8*000000003d3a961b
var_dump($b); //object(stdClass)#*1* (0) {}
$c = new asf();
echo spl_object_hash(new asf()).PHP_EOL; //00000000702b718*a*000000003d3a961b
var_dump($c); //object(asf)#*2* (1) {["asf"]=>int(1)}
class Foo{
protected $_test = 100;
}
$foo1 = new Foo();
$foo2 = new Foo();
$foo3 = new Foo();
echo spl_object_hash($foo1).PHP_EOL; //000000005e3115f60000000047e5edc1
var_dump($foo1); // object(Foo)#1 (1) {["_test":protected]=>int(100)}
echo spl_object_hash($foo2).PHP_EOL; //000000005e3115f50000000047e5edc1
var_dump($foo2); // object(Foo)#2 (1) {["_test":protected]=>int(100)}
echo spl_object_hash($foo3).PHP_EOL; //000000005e3115f40000000047e5edc1
var_dump($foo3); //object(Foo)#3 (1) {["_test":protected]=>int(100)}
$foo1 = new stdClass();
echo spl_object_hash($foo1).PHP_EOL; //000000005e3115f30000000047e5edc1
var_dump($foo1); //object(stdClass)#4 (0) {}
$foo1 = new stdClass();
echo spl_object_hash($foo1).PHP_EOL; //000000005e3115f60000000047e5edc1
var_dump($foo1); //object(stdClass)#1 (0) {}
memoryUsage(memory_get_usage(), $base_memory_usage);//Bytes diff: 0
memoryUsage(memory_get_usage(), $base_memory_usage);//Bytes diff: 88
compiled vars: !0 = $a // тут в !0 используется как идентификатор для переменной с именем $a
// и дальше работа уже непосредственно с этим идентификатором
INIT_ARRAY ~0 // Создаем массив ~0
ASSIGN !0, ~0 // Присваиваем $a созданный массив
Работа с памятью (и всё же она есть)