TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #29 695
کلون کردن (cloning) به روندی اشاره دارد که در آن یک نسخه دقیق از یک شیء موجود ایجاد می‌شود.
زمانی که یک شیء کلون می‌شود، یک شیء جدید با مقادیر خصوصیت‌های یکسان ایجاد می‌شود، اما این شیء جدید و اصلی در دو آدرس مموری مختلف قرار دارند، به این معنی که تغییرات بعدی در هر شیء تأثیری بر دیگری نخواهد داشت، مگر اینکه خصوصیات مرجع به اشتراک گذاشته شده باشند (مانند شیء‌هایی که از کلاس‌های دیگر، آرایه‌ها یا شیء‌های استاندارد تشکیل شده‌اند).

برای کلون کردن یک شیء در PHP، کلمه کلیدی clone استفاده می‌شود.
$object = new MyClass();
$cloned_object = clone $object;

کاربرد ها:
ایجاد نسخه‌های مستقل برای انجام عملیات‌هایی که نباید تأثیری بر نسخه اصلی داشته باشند.

جلوگیری از تغییرات ناخواسته در شیء اصلی زمانی که آن را به یک تابع می‌فرستید که ممکن است خصوصیات آن را تغییر دهد.

ساده‌سازی ایجاد نمونه‌های مشابه با خصوصیات مشترک به جای ایجاد دستی آن‌ها.

مثال کاربردی:
class Car {
public $model;
public $color;

public function __construct($model, $color) {
$this->model = $model;
$this->color = $color;
}
}

$originalCar = new Car('Ford', 'Red');
$clonedCar = clone $originalCar;
$clonedCar->color = 'Blue';

echo $originalCar->color; // خروجی: Red
echo $clonedCar->color; // خروجی: Blue

در این مثال، ما یک نمونه از کلاس Car ایجاد کردیم و آن را کلون کردیم. هر شیء حالا مستقل است و تغییر رنگ در $clonedCar تأثیری بر $originalCar ندارد.

اگر شیء شما منابعی مانند فایل‌های باز، کانکشن‌های پایگاه داده یا پردازه‌های کرل را در خود نگه‌داری می‌کند، clone به صورت خودکار این منابع را کپی نمی‌کند. شما باید به صورت دستی مدیریت کنید که چگونه این منابع را بین نسخه‌های مختلف شیء به اشتراک بگذارید یا کپی کنید.

کلون بصورت پیش‌فرض یک کپی سطحی است، ویژگی‌های پریمیتیو (مانند اعداد و رشته‌ها) به طور مستقل کپی می‌شوند، اما ویژگی‌هایی که به اشیاء یا آرایه‌های دیگر اشاره می‌کنند، به همان مراجع اصلی اشاره خواهند داشت.
کپی سطحی می‌تواند به مشکلاتی منجر شود اگر شما تغییراتی در یک شیء کلون شده ایجاد کنید که مراجع مشترک با شیء اصلی دارد؛ تغییرات می‌تواند بر شیء اصلی تأثیر بگذارد.
برای جلوگیری از این موضوع، ممکن است لازم باشد که یک کپی عمیق از شیء ایجاد کنید، به این معنی که هر شیء داخلی نیز به طور مستقل کپی می‌شود.در PHP، اگر می‌خواهید رفتار کلون کردن را کنترل کنید یا کپی عمیق را انجام دهید، می‌توانید از مجیک متد clone استفاده کنید. وقتی شما یک شیء را کلون می‌کنید، اگر مجیک متد clone در کلاس آن شیء تعریف شده باشد، به طور خودکار فراخوانی می‌شود. شما می‌توانید در این متد تعریف کنید که چه اتفاقی باید برای خصوصیات ارجاعی در هنگام کلون کردن بیفتد.

توضیحات و مثال های مربوط به مجیک متد __clone در پست های بعدی با مبحث مجیک متد ها داده میشود.

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • 👍 5
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 →