🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ mahdi mortezaee
خلاصه ساخت object
جامعه پی اچ پی ایجاد شده در ۰۳ بهمن ۱۳۹۸

به صورت خلاصه برای ساخت object در php چند روش وجود دارد :

روش اول : ساخت آرایه و cast کردن آن به object مانند زیر 

$array = array ( 'mahdi' , 'ali' , 'moheb' );
$object = (object) $array ;

ولی باید توجه بشه که اگه آرایه چند بعدی باشه آرایه‌های داخلی تبدیل به object نمیشوند و آرایه باقی میمانند و برای اینکه تمام بعد‌های آرایه تبدیل به object شود باید تمام ارایه‌های دورنی را هم cast کرد مانند زیر 

$object =  (object)  array ( 
                  "user1" => (object)  [ 
                    "name" => "mahdi" , 
                    "family" => "mortezaee"
                  ] , 
                  "user2" => (object)  [ 
                    "name" => "ali" , 
                    "family" => "habibi"
                  ]  
               );  

روش دوم : استفاده از کلاس stdClass که مانند زیر ساخته و مقدار دهی میشه 

$object = new stdClass ;
$object->name = 'mahdi';
$object->family = 'moheb';

 

اما سوالی که برای من وجود داره اینه که در هردو روش object ساخته میشه که در مثال زیر حتی دارای مقدار یکسانی نیز هستند ولی اما در خروجی مقادیر دارای ماهیت یکسان نیستند..  به خروجی کد اگه دقت کنید این موضوع رو مشاهده میکنید :

$object_std = new stdClass ;
$object_std->name = 'mahdi';
$object_std->family = 'moheb';
$object = (object)[] ;
$object->name = 'mahdi';
$object->family = 'moheb';
if($object == $object_std){
  echo 'equal value' ;
}else{
  echo 'not equal value' ;
}
echo '<br>';
if($object === $object_std){
  echo 'equal type' ;
}else{
  echo 'not equal type' ;
}
//output =  
// equal value
// not equal type

 

ممنون جناب مرتضایی

فقط لطفا در هنگام ساخت تاپیک جدید نوعش رو مشخص کنید. نوع این تاپیک رو نباید سوال فنی میذاشتید.

لقمان آوند ۰۴ بهمن ۱۳۹۸، ۰۸:۰۲

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

ولی === باید دو آبجکت به یک شی رفرنس داده شوند مثل مثالی که استاد زد و گفت به یک نقطه از حافظه اشاره میکنن دو آبجکت

لینک منبع جهت مطالعه

https://www.php.net/manual/en/language.oop5.object-comparison.php

مرتضی ترکمن ۰۴ بهمن ۱۳۹۸، ۱۳:۰۸

پس در حالت عادی اگر 2 متغیر مقدار و data type یکسان داشته باشند خروجی عملگر === برابر true است درحالی که برای object‌ها باید علاوه بر مقدار و data type به یک refrence اشاره بکنند ... در مثال زیر این موضوع رو میشه راحت‌تر درک کرد .

لطفا اگه اشتباه متوجه شدم راهنماییم کنید 

$var1 = 10 ;
$var2 = 10 ;
if($var1 === $var2){
    echo 'equal ' ;
} else { echo 'not equal' ;  }
// output -> equal
$car1 = new stdClass ;
$car1 -> name = 'mahdi' ;
$car2 = new stdClass ;
$car2 -> name = 'mahdi' ;
if($car1 === $car2){
    echo 'equal' ;
}else { echo 'not equal' ;  }
// output -> not equal
$car3 = &$car2 ;
if($car3 === $car2){
    echo 'equal' ;
}else { echo 'not equal' ;  }
// output -> equal

 

mahdi mortezaee ۰۴ بهمن ۱۳۹۸، ۱۶:۵۰

سلام

دستور زیر دقیقا چیکار میکنه؟

در اصل =& چیکار میکنه؟

$car3 = &$car2 ;



 

علیرضا جهانی ۱۵ آذر ۱۳۹۹، ۲۱:۰۳