PDA

View Full Version : عملکرد object درون class؟؟



aminking2005
سه شنبه 03 مرداد 1391, 11:22 صبح
سلام دوستان

من با عملکرد شی درون یک کلاس مشکل دارم

لطفا به کد زیر توجه کنید


<?php
class treenod
{

function __construct()
{
echo 'hello<br />';


$ob=new treenod;
//$this->ob->display();
}

function displar()

{
echo 'hi';
}

}

$ob2=new treenod;
$ob2->display;
?>

وقتی این کد اجرا شود شروع میکند بی نهایت بار کلمه hello را چاپ کند
(توجه کنید $this->ob->display() غیرفعال است )
لطفا در مورد عملکرد این نمونه کد توضیح دهید چرا این طوری میشود؟
در حالی که $this->ob->display() غیر فعال است چرا کد دائم تکرار میشود؟البته فعال بودن و نبودن این خط تاثیری ندارد در نتیجه


ممنون

desatir7316
سه شنبه 03 مرداد 1391, 11:32 صبح
$ob=new treenod;
داخل خودش اومدی نمونه سازی کردی هربار برمیگرده یه نمونه از خودش بسازه و ....

این خط کد رو حذفش کن بعد دوباره تست کن تا متوجه بشی

aminking2005
سه شنبه 03 مرداد 1391, 12:29 عصر
سلام
ممنون

ایا می توان این طور گفت که یک شی به محض این که تعریف میشود همان لحظه یک نمونه از کلاس میگیرد و منتظر نمی ماند که ما ان را به تابعی درون کلاس ارجاع دهیم (;()this->ob->display$) و بعد عمل کند؟

desatir7316
سه شنبه 03 مرداد 1391, 12:38 عصر
آره همون لحظه گرفته میشه:

<?php
class treenod
{

function __construct()
{
echo 'hello';


// $ob=new treenod;
//$this->ob->display();
}

function displar()

{
echo 'hi';
}

}

$ob2=new treenod;

// $ob2->display;
?>
ببینید ، اینجا ما هیچ کاری نکردیم فقط یه نمونه درست کردیم ، دیگه هیج تابعی رو صدا نزدیم اما بازم hello روی صفحه چاپ می شه

aminking2005
سه شنبه 03 مرداد 1391, 15:31 عصر
بازم ممنون
هنوز یک ابهام برای من باقی مانده
لطفا به کد زیر دقت کنید تا من ان تحلیلی که در ذهنم هست بگویم:


<?php
class treenod
{
public $m_a;
function __construct($a)
{
$this->m_a=$a;


echo 'hello<br />';

if($this->m_a==1)
{

$ob=new treenod(0);
$ob->display();

}
}

function display()

{
echo 'hi<br />';
}

}

$ob2=new treenod($a=1);

//$ob2->display();
?>


1- شی بیرونی یعنی ob2$ از کلاس ساخته میشود.پس در این لحظه کلاس ما یک بار اجرا میشود
2-در ابتدا یک hello چاپ میشود تا برسیم به if
3- به دلیل انکه پارامتر شی ما 1 بوده است پس شرط if برقرار است و وارد شرط میشویم
4-یک شی جدید با نام ob$ ساخته میشود که پارامتر ان را (0 )گذاشته ایم
ان چه ابهام دارم از این جا شروع میشود::
5-حالا به محض ساخته شدن شی جدید در همان خط ,خواندن ادامه کدها متوقف میشود تا کلاس یک بار از نو با پارامتر شی جدید (یعنی 0) اسکن میشود(اجرا میشود) تا نتیجه ان به اتمام برسد و سپس ادامه بررسی کدها از همان جایی که شی تعریف شده بود و متوقف مانده بود ادامه می یابد
اگر غیر از این باشد قاعدتا نباید hi چاپ شود و فقطباید دو عدد hello داشته باشیم

ایا تحلیل من صحیح است؟

desatir7316
سه شنبه 03 مرداد 1391, 15:43 عصر
سلام
تحلیلتون درسته