زمانی که یک شیء کلون میشود، یک شیء جدید با مقادیر خصوصیتهای یکسان ایجاد میشود، اما این شیء جدید و اصلی در دو آدرس مموری مختلف قرار دارند، به این معنی که تغییرات بعدی در هر شیء تأثیری بر دیگری نخواهد داشت، مگر اینکه خصوصیات مرجع به اشتراک گذاشته شده باشند (مانند شیءهایی که از کلاسهای دیگر، آرایهها یا شیءهای استاندارد تشکیل شدهاند).
برای کلون کردن یک شیء در 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