خلاصه ساخت object

پرسیده شده
فعالیت 1240 روز پیش
دیده شده 968 بار
1

به صورت خلاصه برای ساخت 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

 

فایل پیوست

mahdi mortezaee
mahdi mortezaee

3 بهمن 98

1
حذف شده

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

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

فایل پیوست

لقمان آوند

توسط

لقمان آوند

4 بهمن 98

حذف شده
بله استاد.. ممنون بابت تذکرتون فقط سوالم رو در ادامه مطرح کردم بنده که ممنون میشم راهنماییم کنید !
mahdi mortezaee

4 بهمن 98

5

مورد تایید استاد

حذف شده

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

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

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

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

فایل پیوست

مرتضی ترکمن

توسط

مرتضی ترکمن

4 بهمن 98

حذف شده
ممنون بابت راهنماییتون
mahdi mortezaee

4 بهمن 98

4

مورد تایید استاد

حذف شده

پس در حالت عادی اگر 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

توسط

mahdi mortezaee

4 بهمن 98

حذف شده
دقیقا درست است
مرتضی ترکمن

4 بهمن 98

0
حذف شده

سلام

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

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

$car3 = &$car2 ;



 

فایل پیوست

علیرضا جهانی

توسط

علیرضا جهانی

15 آذر 99