TGViewer
CodeVerse | دنیای برنامه نویسان CodeVerse | دنیای برنامه نویسان @codeverse_dev · 1.06K subscribers
Post #563 427
🐘 چرا کپی کردن یک آرایه همیشه یعنی کپی شدن حافظه نیست؟

یکی از رفتارهای جالب PHP، مکانیزم Copy-on-Write هست.

مثلاً:

$data = range(1, 1_000_000);

$copy = $data;

شاید فکر کنی PHP همین لحظه یک آرایه‌ی یک میلیون‌عضوی دیگه داخل Memory ساخته.

اما نه! 👀

حالا PHP تا وقتی داده تغییر نکرده، می‌تونه بین این دو متغیر از همان داده‌ی موجود استفاده کنه.

$data = range(1, 1_000_000);

$copy = $data;

// هنوز الزاماً یک کپی کامل ساخته نشده

اما داستان وقتی جالب میشه که یکی از آن‌ها را تغییر بدی:

$copy[0] = 999;

اینجاست که PHP باید وضعیت داده را طوری مدیریت کند که تغییر $copy روی $data تأثیر نگذارد.

یعنی عملاً:

$data  ─────┐
├──> Shared Memory
$copy ─────┘

↓ تغییر

$data ─────────> Original Data
$copy ─────────> New Copy

حالا یک نکته‌ی مهم‌تر 👇

همین موضوع یکی از دلایلیه که این کد:

function process(array $data)
{
// ...
}

لزوماً به این معنی نیست که با ورود $data به تابع، یک کپی کامل از آرایه ساخته می‌شود.

زبانPHP می‌تواند تا زمانی که داده تغییر نکرده، از Copy-on-Write استفاده کند.

اما اگر داخل تابع شروع به تغییر آرایه کنی:

function process(array $data)
{
$data['status'] = 'done';
}

شرایط Memory می‌تواند کاملاً متفاوت شود.

🔴 پس یک تصور اشتباه:

«قابلیت Pass by Value یعنی PHP همیشه همان لحظه کل داده را کپی می‌کند.»

نه لزوماً.

در PHP، برای داده‌هایی مثل Array، مکانیزم Copy-on-Write باعث می‌شود کپی فیزیکی داده تا زمان نیاز به تغییر، به تعویق بیفتد.

نکته‌ی Performance 🚀

اگر با آرایه‌های بزرگ، پردازش فایل، داده‌های API یا پردازش‌های سنگین کار می‌کنی، درک Copy-on-Write مهمه؛ چون ممکنه یک تغییر کوچک روی یک آرایه‌ی بزرگ، باعث افزایش قابل‌توجه مصرف Memory بشه.

حرفه‌ای نوشتن PHP فقط کد نیست؛ باید بدونی Engine پشت این کد چه رفتاری داره. 🐘

@CodeVerse_dev
  • ❤ 8
More from @codeverse_dev
  1. Oct 7, 2026👨‍💻 برنامه‌نویسی با AI راحت‌تر شده؛ پس چرا بعضی Developerها خسته‌تر شده‌اند؟ طبق نظرسنجی…
  2. Oct 7, 2026🚨 وردپرس 7.1.3 منتشر شد؛ این یکی را عقب نینداز وردپرس دیروز نسخه 7.1.3 را منتشر کرد؛ یک آ…
  3. Oct 6, 2026شرکت Google وارد یک درگیری جدی با ناشران شده ⚖️ رگولاتور رقابت لهستان اعلام کرده Google را…
  4. Oct 6, 2026اگر Windows 11 داری، قبل از نصب بعضی آپدیت‌ها حواست باشد ⚠️ مایکروسافت تأیید کرده آپدیت پی…
  5. Oct 6, 2026اگر Chrome استفاده می‌کنی، این آپدیت را جدی بگیر ⚡ نسخه Stable مرورگر Chrome برای دسکتاپ ب…
  6. Oct 6, 2026🖥 سازنده محتوایی؟ ویندوزت بدون این ۵ نرم‌افزار نصفه‌ست! خب راستشو بخوای، من خودم تا چند و…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →