TGViewer
CodeVerse | دنیای برنامه نویسان CodeVerse | دنیای برنامه نویسان @codeverse_dev · 1.06K subscribers
Post #581 400
🐘 چرا کپی کردن یک آرایه همیشه به معنی کپی شدن Memory نیست؟

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

مثلاً:

$data = range(1, 1_000_000);

$copy = $data;

شاید فکر کنی الان PHP دو آرایه‌ی یکسان داخل Memory ساخته.

اما نه. 👀

زبانPHP در این مرحله می‌تونه هر دو متغیر رو به همون داده‌ی موجود در Memory ارجاع بده.

تا وقتی که یکی از اون‌ها تغییر نکرده:

$data = range(1, 1_000_000);

$copy = $data;

عملاً لازم نیست فوراً یک کپی کامل ساخته بشه.

اما وقتی تغییر ایجاد می‌کنی:

$copy[0] = 999;

اینجاست که PHP باید داده رو از هم جدا کنه.

یعنی:

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

↓ تغییر

$data ─────────> Original Data

$copy ─────────> New Copy

🔥 نکته مهم‌تر

این موضوع وقتی مهم می‌شه که با آرایه‌های بزرگ کار می‌کنی.

مثلاً:

function process(array $data): void
{
$data['status'] = 'processed';
}

$users = getHugeArray();

process($users);

ممکنه با دیدن array $data فکر کنی PHP از همون ابتدا کل آرایه رو کپی کرده.

اما Pass-by-Value در PHP الزاماً به معنی Copy فوری نیست.

زبانPHP می‌تونه از Copy-on-Write استفاده کنه و فقط زمانی واقعاً کپی ایجاد کنه که داده نیاز به تغییر داشته باشه.

---

⚠️ اما اینجا یک دام وجود داره

اگر واقعاً نمی‌خوای آرایه کپی بشه و فقط می‌خوای تابع روی همان داده کار کنه، می‌تونی از Reference استفاده کنی:

function process(array &$data): void
{
$data['status'] = 'processed';
}

ولی این به معنی «همیشه بهتر بودن Reference» نیست.

حالا Referenceها می‌تونن باعث پیچیده‌تر شدن رفتار کد و ایجاد Side Effect بشن.

پس صرفاً برای کاهش Memory نباید کورکورانه از & استفاده کرد.

---

🧠 نکته حرفه‌ای امروز

در PHP:

Assignment ≠ Copy فوری

و:

Pass-by-Value ≠ Copy فوری

به لطف Copy-on-Write، PHP تا زمانی که لازم نباشه داده رو واقعاً Duplicate نمی‌کنه.

بنابراین وقتی Performance و Memory برات مهمه، باید تفاوت بین:

Value

Reference

Copy-on-Write

و

Actual Memory Copy

رو بشناسی.

این دقیقاً یکی از تفاوت‌های بین «کدی که فقط کار می‌کنه» و «کدی که رفتار PHP Engine رو می‌فهمه» است. 🐘


@CodeVerse_dev
  • 👍 5
  • ❤ 3
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 →