PDA

View Full Version : سوال: سوال در مورد یک مثال شی گرایی



DR.HTML
شنبه 10 خرداد 1393, 20:07 عصر
دوستان یه سوال خواستم بپرسم اونم درمورد کد زیره که چرا این نتیجرو چاپ میکنه (مثال سایت php.net )

<?php

class SimpleClass{

}

$instance = new SimpleClass();

$assigned = $instance;
$reference =& $instance;

$instance->var = '$assigned will have this value';

$instance = null; // $instance and $reference become null

var_dump($instance);
echo "</br>";
var_dump($reference);
echo "</br>";
var_dump($assigned);
?>




مگه قانونا کد خط به خط از بالا اجرا نمیشه ؟
اینجا
$assigned = $instance;
$reference =& $instance;


اومده برابر قرار داده یکی یه کپی کامل یکیش مقدارشو

خوب پایینتر اومده
$instance->var = '$assigned will have this value';

$instance = null;


تغیر داده مقادیر ابجکت اصلیو حالا سوالم اینه اون متغیرهای قبلی قبل از اینا مقدار دهی شدن چرا بازم مقدارشون تغیر میکنه ؟

rezakho
شنبه 10 خرداد 1393, 23:02 عصر
سوالتون کمی اشکال داره، واقعیت امر اینه که یک نکته کلیدی در شی گرایی php 5 هست که گفته میشه، اشیا در php با ارجاع پاس داده میشند
اما این گفته کاملا درست نیست!

ارجاع ها در php در واقع نام های مستعار هستند که باعث میشند 2 متغیر به یک مقدار واحد دسترسی داشته باشند

ارجاع ها اشاره گر نیستند، اما متغیرهایی که حاوی شی هستند، همان اشاره گرها هستند

وقتی شما متغیر از نوع شی رو به متغیر دیگه انتصاب میدید، هر دو کپی ای از شناسه شی اصلی رو نگه میدارند و با null شدن یکی، دیگری بدون تغییر باقی میمونه، در واقع هر دو اشاره گری به شی هستند

اما اگر شما با استفاده از عملگر &، آدرس شی رو در متغیری بریزید، با تغییر هر کدوم، دیگری هم تغییر خواهد کرد و عملا هر دو ارجاعی به یک اشاره گر هستند، و کر کدام نام مستعاری برای دیگری هست



امیدوارم خوب توضیح داده باشم!

DR.HTML
شنبه 10 خرداد 1393, 23:34 عصر
یعنی ما بیرون از کلاس هرجا که یه ابجکت رو مقدارشو بزاریم توی یه متغیر با & بعد از اون هر جا تغیر کنه مقدارش اونیکیم تغیر میکنه ؟

rezakho
شنبه 10 خرداد 1393, 23:40 عصر
بله، در واقع هر دو متغیر جدا از مقدارشون که چی باشه، یکی هستند و فقط نام مستعاری برای یکدیگرند

DR.HTML
شنبه 10 خرداد 1393, 23:43 عصر
با تشکر کاملا متوجه شدم