به صورت خلاصه برای ساخت 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
سلام
دستور زیر دقیقا چیکار میکنه؟
در اصل =& چیکار میکنه؟
$car3 = &$car2 ;