Maison développement back-end tutoriel php 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为啥要设计成这样呢。
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Avis PHP : Variable non définie : Solution Avis PHP : Variable non définie : Solution Jun 25, 2023 pm 04:18 PM

Dans le développement PHP, nous rencontrons souvent le message d'erreur PHPNotice:Undéfinivariable. Ce message d'erreur signifie que nous avons utilisé une variable non définie dans le code. Bien que ce message d'erreur ne provoque pas le crash du code, il affectera la lisibilité et la maintenabilité du code. Ci-dessous, cet article vous présentera quelques méthodes pour résoudre cette erreur. 1. Utilisez la fonction error_reporting(E_ALL) pendant le processus de développement. Dans le développement PHP, nous pouvons.

Quelles sont les meilleures pratiques en matière d'allocation de mémoire dans les fonctions Java ? Quelles sont les meilleures pratiques en matière d'allocation de mémoire dans les fonctions Java ? May 02, 2024 pm 10:33 PM

Les meilleures pratiques en matière d'allocation de mémoire dans les fonctions Java incluent l'utilisation de la gestion automatique de la mémoire et la garantie que les algorithmes GC appropriés sont utilisés. Surveillez les modèles d’allocation de mémoire et identifiez les fuites de mémoire ou les goulots d’étranglement. Utilisez le pooling d’objets pour réutiliser des objets de taille similaire. Évitez les allocations en grand nombre et de courte durée et envisagez d’utiliser des alternatives. Utilisez le modèle Null Object pour éviter de créer des objets inutiles. Libérez explicitement les ressources natives, en garantissant que la mémoire qui n'est pas accessible à JavaGC est libérée.

Analyse de l'allocation de mémoire de la fonction Golang Analyse de l'allocation de mémoire de la fonction Golang Apr 29, 2024 pm 02:24 PM

Question : Comment analyser l’allocation mémoire d’une fonction Go ? Réponse : Utilisez la fonction heapprofile dans le package pprof pour générer un vidage de tas. Analysez le vidage du tas pour déterminer le type et la taille de l'allocation. Description détaillée : Générer un vidage de tas : activez le profileur de tas et appelez la fonction heapprofile. Analyser le vidage du tas : utilisez la commande gotoolpprof pour analyser le fichier de vidage du tas afin d'afficher les informations d'allocation.

Erreurs courantes dans l'allocation de mémoire des fonctions C++ et leurs solutions Erreurs courantes dans l'allocation de mémoire des fonctions C++ et leurs solutions Apr 22, 2024 pm 05:09 PM

Les erreurs courantes dans l'allocation de mémoire de fonction incluent : 1) des pointeurs bruts suspendus ; 2) des fuites de mémoire ; 3) des pointeurs sauvages ; Solutions : 1) Utilisez des pointeurs intelligents ; 2) Utilisez RAII ; 3) Utilisez des pools de mémoire.

Une discussion approfondie sur les stratégies d'allocation de mémoire et d'expansion des tranches Golang Une discussion approfondie sur les stratégies d'allocation de mémoire et d'expansion des tranches Golang Jan 24, 2024 am 10:46 AM

Analyse approfondie du principe de découpage Golang : allocation de mémoire et stratégie d'expansion Introduction : Le découpage est l'un des types de données couramment utilisés dans Golang. Il fournit un moyen pratique d'exploiter des séquences de données continues. Lors de l’utilisation de tranches, il est important de comprendre ses stratégies d’allocation de mémoire interne et d’expansion pour améliorer les performances du programme. Dans cet article, nous fournirons une analyse approfondie des principes du découpage Golang, accompagnée d'exemples de code spécifiques. 1. Structure de la mémoire et principes de base du découpage Dans Golang, le découpage est un type de référence au tableau sous-jacent.

Analyser les différences entre le tas et la pile en Java et leurs scénarios d'application Analyser les différences entre le tas et la pile en Java et leurs scénarios d'application Feb 24, 2024 pm 11:12 PM

La différence entre le tas et la pile Java et l'analyse de scénarios d'application nécessitent des exemples de code spécifiques. Dans les programmes Java, le tas et la pile sont deux structures de données couramment utilisées et assument des rôles et des fonctions différents en mémoire. Comprendre la différence entre tas et pile est crucial pour écrire des programmes Java efficaces. Tout d’abord, jetons un coup d’œil au tas Java. Le tas est une zone utilisée pour stocker des objets. Tous les objets créés dans le programme sont stockés dans le tas. Le tas est l'endroit où la mémoire est allouée et libérée dynamiquement pendant l'exécution du programme. Elle n'est soumise à aucune restriction et peut être automatiquement allouée et libérée selon les besoins.

Pièges et bonnes pratiques en matière d'allocation de mémoire et de destruction de fonctions C++ Pièges et bonnes pratiques en matière d'allocation de mémoire et de destruction de fonctions C++ Apr 23, 2024 am 09:36 AM

En C++, il existe des pièges dont il faut être conscient lorsque les fonctions allouent et détruisent de la mémoire, notamment les fuites de mémoire (contenant des pointeurs vers la mémoire qui ne sont plus nécessaires) et les pointeurs suspendus (pointant vers la mémoire libérée). Pour éviter ces problèmes, les meilleures pratiques incluent : l'utilisation de pointeurs intelligents (tels que std::shared_ptr) pour gérer automatiquement la mémoire ; l'utilisation de techniques RAII pour garantir que les ressources sont libérées lorsqu'un objet sort de la portée ; les destructeurs avec soin pour libérer les allocations de mémoire. En suivant ces pratiques, vous pouvez garantir la fiabilité de votre code et éviter les fuites de mémoire et les pointeurs suspendus.

Méthodes d'allocation de mémoire et de recyclage des fonctions Golang Méthodes d'allocation de mémoire et de recyclage des fonctions Golang May 16, 2023 pm 01:51 PM

Golang est un langage de programmation orienté objet avec son propre mécanisme de récupération de place, donc l'allocation et le recyclage de la mémoire sont plus faciles que les autres langages. Dans Golang, les fonctions peuvent également allouer de la mémoire et recycler la mémoire. Cet article présentera en détail les méthodes d'allocation et de recyclage de mémoire des fonctions Golang. 1. Allocation de mémoire des fonctions Lorsqu'une fonction est déclarée, le programme lui allouera une mémoire pour stocker le code et les variables statiques de cette fonction. Lorsqu'une fonction est appelée, le programme alloue une pile mémoire pour stocker les variables locales de l'appel.

See all articles