Делает мелкую копию. Но значения в этой мелкой копии указывают на исходные массивы / объекты, потому что они являются объектными ссылками.
Итак, скажем, у нас есть:
var orig = [ [1] ];
В памяти у нас есть:
+−−−−−−−−−−−−−+ [orig:Ref22157]−−−−>| (array) | +−−−−−−−−−−−−−+ +−−−−−−−−−−−−−+ | 0: Ref84572 |−−−−−−−>| (array) | +−−−−−−−−−−−−−+ +−−−−−−−−−−−−−+ | 0: 1 | +−−−−−−−−−−−−−+
Теперь мы делаем:
var copy = orig.slice();
и имеем:
+−−−−−−−−−−−−−+ [orig:Ref22157]−−−−>| (array) | +−−−−−−−−−−−−−+ | 0: Ref84572 |−−−+ +−−−−−−−−−−−−−+ | | | +−−−−−−−−−−−−−+ +−−−>| (array) | +−−−−−−−−−−−−−+ | +−−−−−−−−−−−−−+ [copy:Ref54682]−−−−>| (array) | | | 0: 1 | +−−−−−−−−−−−−−+ | +−−−−−−−−−−−−−+ | 0: Ref84572 |−−−+ +−−−−−−−−−−−−−+
Обратите внимание, как ссылка на вложенный массив (показано здесь как «Ref84572», но мы никогда не видим реальных значений ссылок на объекты) был скопирован, но все же относится к одному и тому же вложенному массиву.
Вот доказательство, что оно мелкое:
var orig = [ [1] ];
var copy = orig.slice();
console.log("orig[0][0] = " + orig[0][0]);
console.log("copy[0][0] = " + copy[0][0]);
console.log("Setting copy[0][0] to 2");
copy[0][0] = 2;
console.log("orig[0][0] = " + orig[0][0]);
console.log("copy[0][0] = " + copy[0][0]);
Обратите внимание, что когда мы изменяем состояние вложенного массива, мы видим эту модификацию независимо от того, какой маршрут мы берем для ее получения (orig[0][0]
или copy[0][0]
).
Новые password_*
методы доступны только в PHP 5.5:
http://www.php.net/manual/en/function.password-hash.php
Взгляните на эту библиотеку, обеспечивающую прямую совместимость:
https://github.com/ircmaxell/password_compat
Вы можете использовать это, чтобы получить доступ к новым password_*
методам, пока не сможете запустить PHP 5.5.