TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #38 722
مجیک متد __clone زمانی فراخوانی می‌شود که یک شیء کلون شود. استفاده از کلون به شما اجازه می‌دهد یک نسخه دقیق از یک شیء موجود را ایجاد کنید، اما با این توانایی که رفتار پیش‌فرض کلون را اصلاح کنید. این بدان معناست که می‌توانید تنظیمات ویژه‌ای را برای نحوه کپی شدن خصوصیات شیء اعمال کنید، بخصوص زمانی که با خصوصیاتی که به شیء‌های دیگر اشاره دارند سروکار دارید.

مثال:
فرض
کنید که شما یک کلاس برای مدیریت پروفایل کاربر دارید و می‌خواهید که هر کلون از این کلاس دارای تنظیمات پیش‌فرض مشابهی باشد اما بتوان آن را به صورت جداگانه تنظیم کرد:
class UserProfile {
public $name;
public $email;
private $settings;

public function __construct($name, $email)
{
$this->name = $name;
$this->email = $email;
$this->settings = new stdClass();
$this->settings->theme = "default";
}

public function __clone()
{
$this->settings = clone $this->settings;
}
}

$user1 = new UserProfile("Ali", "ali@example.com");
$user2 = clone $user1;
$user2->name = "Reza";
$user2->settings->theme = "dark";

echo $user1->name . " has theme " . $user1->settings->theme . "\n";
// Ali has theme default
echo $user2->name . " has theme " . $user2->settings->theme . "\n";
// Reza has theme dark


در مثال ارائه شده، یک کلاس به نام UserProfile تعریف شده که حاوی اطلاعات کاربر است. وقتی شیء این کلاس کلون می‌شود، مجیک متد __clone فعال شده و به جای اینکه تنها به شیء settings ارجاع دهد، یک نسخه کاملاً جدید از آن را ایجاد می‌کند.
این کار موجب می‌شود که هر کاربر کلون شده دارای تنظیمات مستقل خود باشد و تغییرات اعمال شده بر روی یک شیء، بر شیء دیگر تأثیر نگذارد. این امکان از طریق کپی عمیق انجام می‌شود که به معنای کپی کردن همه خصوصیات، و نه فقط ارجاع‌ها، به نسخه کلون شده است.

کپی عمیق و کپی سطحی:
در
PHP، کلونینگ می‌تواند به دو نوع تقسیم شود: کپی سطحی و کپی عمیق.

کپی سطحی (Shallow Copy):
در این نوع کپی، فقط خصوصیات سطحی شیء کپی می‌شوند و هر خصوصیتی که به شیء دیگری ارجاع دهد، فقط ارجاع کپی می‌شود. این بدین معنی است که شی‌های اصلی و کلون شده به همان شیء ارجاعی اشاره خواهند کرد.

کپی عمیق (Deep Copy):
کپی عمیق شامل کپی کردن شیء و همچنین هر شیء دیگری است که توسط خصوصیات اصلی به آن اشاره شده است. این اطمینان حاصل می‌کند که شیء کلون شده و شیء اصلی هیچ ارتباط مستقیمی با یکدیگر ندارند. استفاده از مجیک متد __clone در PHP این امکان را می‌دهد که شما بتوانید کپی عمیق را اجرا کنید و خصوصیاتی که به شیء‌های دیگر اشاره دارند را نیز به صورت مجزا کپی کنید.

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • 🔥 4
  • 👍 2
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
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 →