Heim Backend-Entwicklung PHP-Tutorial PHP变量内存分配问题记录整理_php技巧

PHP变量内存分配问题记录整理_php技巧

May 17, 2016 am 08:52 AM
php变量 内存分配

今天碰到一个关于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为啥要设计成这样呢。
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP-Hinweis: Undefinierte Variable:Lösung PHP-Hinweis: Undefinierte Variable:Lösung Jun 25, 2023 pm 04:18 PM

PHP-Hinweis: Undefinierte Variable:Lösung

Was sind die Best Practices für die Speicherzuweisung in Java-Funktionen? Was sind die Best Practices für die Speicherzuweisung in Java-Funktionen? May 02, 2024 pm 10:33 PM

Was sind die Best Practices für die Speicherzuweisung in Java-Funktionen?

Speicherzuordnungsanalyse der Golang-Funktion Speicherzuordnungsanalyse der Golang-Funktion Apr 29, 2024 pm 02:24 PM

Speicherzuordnungsanalyse der Golang-Funktion

Eine ausführliche Diskussion der Speicherzuweisungs- und Erweiterungsstrategien von Golang-Slices Eine ausführliche Diskussion der Speicherzuweisungs- und Erweiterungsstrategien von Golang-Slices Jan 24, 2024 am 10:46 AM

Eine ausführliche Diskussion der Speicherzuweisungs- und Erweiterungsstrategien von Golang-Slices

Fallstricke und Best Practices bei der Speicherzuweisung und -zerstörung von C++-Funktionen Fallstricke und Best Practices bei der Speicherzuweisung und -zerstörung von C++-Funktionen Apr 23, 2024 am 09:36 AM

Fallstricke und Best Practices bei der Speicherzuweisung und -zerstörung von C++-Funktionen

Implementieren Sie eine effiziente Speicherzuweisung und Speicherbereinigung in der Go-Sprache Implementieren Sie eine effiziente Speicherzuweisung und Speicherbereinigung in der Go-Sprache Sep 28, 2023 am 11:10 AM

Implementieren Sie eine effiziente Speicherzuweisung und Speicherbereinigung in der Go-Sprache

Häufige Fehler bei der Zuweisung von C++-Funktionsspeicher und deren Lösungen Häufige Fehler bei der Zuweisung von C++-Funktionsspeicher und deren Lösungen Apr 22, 2024 pm 05:09 PM

Häufige Fehler bei der Zuweisung von C++-Funktionsspeicher und deren Lösungen

Analysieren Sie die Unterschiede zwischen Heap und Stack in Java und deren Anwendungsszenarien Analysieren Sie die Unterschiede zwischen Heap und Stack in Java und deren Anwendungsszenarien Feb 24, 2024 pm 11:12 PM

Analysieren Sie die Unterschiede zwischen Heap und Stack in Java und deren Anwendungsszenarien

See all articles