PHP变量内存分配问题记录整理_php技巧
May 17, 2016 am 08:52 AM今天碰到一个关于php变量内存分配的问题,记录一下。
如下这段代码:
$a = array (
'str' => 1,
'child' => 2
);
$b = $a;
$b['child'] = $a;
$b['child']['str'] = 2;
echo $b['str'];
$b = null;
echo $a['str'];
会输出什么呢,结果是11,$b=$a的时候其实并没有新分配内存,ab是指向的同一个区域,$b['child']=$a时,$b会先copy一份原来$a的内容,然后再修改,也就是说这时候$b和$a指向了不同的区域,再修改$a或者$b的时候都不会互相影响了。
再看这段代码:
class A
{
public $str = '';
public $child;
}
$a = new A();
$b = $a;
$a->str = 1;
$a->child = 2;
$b->child = $a;
$b->child->str = 2;
echo $b->str;
$b = null;
echo $a->str;
又会输出什么呢,结果是22,根据实际情况来判断,$b->child=$a的时候,并没有像数组那样,重新copy一份,ab以及a->child都是指向的同一片区域,这样改任何一个,其余几个都会被改掉。
可是PHP为啥要设计成这样呢。

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Avis PHP : Variable non définie : Solution

Quelles sont les meilleures pratiques en matière d'allocation de mémoire dans les fonctions Java ?

Analyse de l'allocation de mémoire de la fonction Golang

Une discussion approfondie sur les stratégies d'allocation de mémoire et d'expansion des tranches Golang

Pièges et bonnes pratiques en matière d'allocation de mémoire et de destruction de fonctions C++

Implémenter une allocation de mémoire et un garbage collection efficaces en langage Go

Erreurs courantes dans l'allocation de mémoire des fonctions C++ et leurs solutions

Analyser les différences entre le tas et la pile en Java et leurs scénarios d'application
