ホームページ バックエンド開発 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为啥要设计成这样呢。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP 注意: 未定義の変数: 解決策 PHP 注意: 未定義の変数: 解決策 Jun 25, 2023 pm 04:18 PM

PHP 開発では、PHP Notice:Unknownvariable というエラー メッセージが頻繁に発生します。このエラー メッセージは、コード内で未定義の変数が使用されたことを意味します。このエラー メッセージによってコードがクラッシュすることはありませんが、コードの可読性と保守性に影響します。以下、この記事ではこのエラーを解決するいくつかの方法を紹介します。 1. 開発プロセス中に error_reporting(E_ALL) 関数を使用します。PHP 開発では、次のことができます。

Java 関数でのメモリ割り当てのベスト プラクティスは何ですか? Java 関数でのメモリ割り当てのベスト プラクティスは何ですか? May 02, 2024 pm 10:33 PM

Java 関数でのメモリ割り当てのベスト プラクティスには、自動メモリ管理の使用と、適切な GC アルゴリズムの使用の確保が含まれます。メモリ割り当てパターンを監視し、メモリ リークやボトルネックを特定します。オブジェクト プーリングを使用して、同様のサイズのオブジェクトを再利用します。短期間の大量の割り当てを避け、代替手段の使用を検討してください。不要なオブジェクトの作成を避けるには、Null Object パターンを使用します。ネイティブ リソースを明示的に解放し、JavaGC にアクセスできないメモリを確実に解放します。

golang関数のメモリ割り当て解析 golang関数のメモリ割り当て解析 Apr 29, 2024 pm 02:24 PM

質問: Go 関数のメモリ割り当てを分析するにはどうすればよいですか?回答: pprof パッケージの heapprofile 関数を使用して、ヒープ ダンプを生成します。ヒープ ダンプを分析して、割り当てのタイプとサイズを決定します。詳細な説明: ヒープ ダンプを生成します。ヒープ プロファイラーを有効にして、heapprofile 関数を呼び出します。ヒープ ダンプを分析する: gotoolpprof コマンドを使用してヒープ ダンプ ファイルを分析し、割り当て情報を表示します。

Golang スライスのメモリ割り当てと拡張戦略についての詳細な説明 Golang スライスのメモリ割り当てと拡張戦略についての詳細な説明 Jan 24, 2024 am 10:46 AM

Golang のスライシング原理の詳細な分析: メモリ割り当てと拡張戦略 はじめに: スライシングは Golang で一般的に使用されるデータ型の 1 つであり、連続データ シーケンスを操作する便利な方法を提供します。スライスを使用する場合、プログラムのパフォーマンスを向上させるために、スライスの内部メモリ割り当てと拡張戦略を理解することが重要です。この記事では、Golang スライスの原理を詳細に分析し、具体的なコード例を示します。 1. メモリ構造とスライスの基本原理 Golang では、スライスは基になる配列への参照型です。

C++ 関数のメモリ割り当てと破棄における落とし穴とベスト プラクティス C++ 関数のメモリ割り当てと破棄における落とし穴とベスト プラクティス Apr 23, 2024 am 09:36 AM

C++ では、関数がメモリを割り当てたり破棄したりするときに、メモリ リーク (不要になったメモリへのポインタを保持する) やダングリング ポインタ (解放されたメモリを指す) など、注意すべき落とし穴があります。これらの問題を防ぐためのベスト プラクティスには、スマート ポインター (std::shared_ptr など) を使用してメモリを自動的に管理すること、オブジェクトがスコープ外になったときにリソースが確実に解放されるようにすること、デストラクターを慎重に処理することを避けることが含まれます。メモリの割り当てを解放します。これらの実践に従うことで、コードの信頼性を確保し、メモリ リークやダングリング ポインタを防ぐことができます。

C++ 関数のメモリ割り当てにおける一般的なエラーとその解決策 C++ 関数のメモリ割り当てにおける一般的なエラーとその解決策 Apr 22, 2024 pm 05:09 PM

関数のメモリ割り当てにおける一般的なエラーには、1) 未解決の未処理ポインタ、2) メモリ リーク、4) 無効なポインタの解放などがあります。解決策: 1) スマート ポインターを使用する、2) RAII を使用する、3) メモリ プールを使用する。

Go 言語で効率的なメモリ割り当てとガベージ コレクションを実装する Go 言語で効率的なメモリ割り当てとガベージ コレクションを実装する Sep 28, 2023 am 11:10 AM

Go 言語での効率的なメモリ割り当てとガベージ コレクションの実現 最新のプログラミング言語では、メモリを効果的に管理することが非常に重要です。効率性を追求して生まれた言語である Go 言語は、シンプルで使いやすいメモリ管理およびガベージ コレクション メカニズムを提供し、開発者が手動でメモリを処理することなく効率的なメモリの割り当てと解放を実現できるようにします。 Go 言語でのメモリ割り当てはランタイム システムの責任です。動的に割り当てられたオブジェクト、配列、スライスなどを保存するためのヒープと呼ばれるメモリ領域を提供します。 n を使用する場合

Java のヒープとスタックの違いとそのアプリケーション シナリオを分析する Java のヒープとスタックの違いとそのアプリケーション シナリオを分析する Feb 24, 2024 pm 11:12 PM

Java ヒープとスタックの違いとアプリケーション シナリオの分析には、具体的なコード例が必要です。Java プログラムでは、ヒープとスタックは一般的に使用される 2 つのデータ構造であり、メモリ内で異なる役割と機能を想定します。効率的な Java プログラムを作成するには、ヒープとスタックの違いを理解することが重要です。まず、Java ヒープを見てみましょう。ヒープとはオブジェクトを格納する領域のことで、プログラムで作成したオブジェクトはすべてヒープに格納されます。ヒープは、プログラムの実行中にメモリが動的に割り当ておよび解放される場所であり、いかなる制限も受けず、必要に応じて自動的に割り当ておよび解放できます。

See all articles