-
September 27th, 2018, 10:01
#1
عضو انجمن
تحلیل و تفسیر خط به خط کد php ممکن است؟
سلام
یادمه توی دوران دانشگاه که برنامه نویسی c رو یاد میگرفتیم یه روش بود که نشون میداد یک کد دقیقا در هر مرحله چه کاری رو انجام میده و کامل کد رو تا انتها برای ما اجرا میکرد...
حالا توی برنامه نویسی php توی برخی کد ها واقعا زمان بر هست که متوجه بشم کد من داره چه کاری انجام میده
راهی هست که بتونم ببینم در هر مرحله کد من چیکار میکنه؟
الان کد پایین رو مشاهده کنید:
کد PHP:
function xxx($n){
if($n == 1){
return 1;
}else{
return 3 * xxx($n-1);
}
}
echo xxx(5);
توی قسمت پایین دقیقا چه اتفاقی می افته؟
کد PHP:
return 3 * xxx($n-1);
شما اگه عدد 3 رو تغییر بدین متوجه میشید که محاسبه تغییر میکنه
نیم ساعت هست که دارم بهش فکر میکنم و هنوز به نتیجه نرسیدم. لطفا یه روش بهم معرفی کنید که این کد ها رو بتونم تحیلیل کنم تا وقتم رو زیاد نگیره
-
-
September 27th, 2018 10:01
# ADS
-
September 27th, 2018, 17:14
#2
پاسخ : تحلیل و تفسیر خط به خط کد php ممکن است؟

نوشته اصلی توسط
سیدرضا بازیار
سلام
یادمه توی دوران دانشگاه که برنامه نویسی c رو یاد میگرفتیم یه روش بود که نشون میداد یک کد دقیقا در هر مرحله چه کاری رو انجام میده و کامل کد رو تا انتها برای ما اجرا میکرد...
حالا توی برنامه نویسی php توی برخی کد ها واقعا زمان بر هست که متوجه بشم کد من داره چه کاری انجام میده
راهی هست که بتونم ببینم در هر مرحله کد من چیکار میکنه؟
الان کد پایین رو مشاهده کنید:
کد PHP:
function xxx($n){
if($n == 1){
return 1;
}else{
return 3 * xxx($n-1);
}
}
echo xxx(5);
توی قسمت پایین دقیقا چه اتفاقی می افته؟
کد PHP:
return 3 * xxx($n-1);
شما اگه عدد 3 رو تغییر بدین متوجه میشید که محاسبه تغییر میکنه
نیم ساعت هست که دارم بهش فکر میکنم و هنوز به نتیجه نرسیدم. لطفا یه روش بهم معرفی کنید که این کد ها رو بتونم تحیلیل کنم تا وقتم رو زیاد نگیره
سلام این فانکشنی که شما نوشتی به صورت بازگشتی یا recursive هست و درک کارکرد اینطور موارد کمی سخته
می تونید این فانکشن را تریس کرده و با رسم درخت بازگشت جوابش رو بدست بیارید
مثلا اون قسمتی که گفتین چه کاری انجام میده ، فرض کنید با مقدار 3 این فانکشن فراخوانی بشه ، میرسیم به
کد PHP:
return 3 * xxx(3-1)
و اینجا دوباره فانکشن با مقدار 2 فراخوانی میشه
کد PHP:
return 3 * xxx(2-1)
و در این مرحله چون فانکشن با مقدار 1 فراخوانی میشه و داخل شرط نوشتیم اگر $n مساوی با 1 بود 1 برگشت داده بشه مقدار 1 رو داریم که
مقدار 1 رو به ما میده از طرفی در 3 ضرب میشه و کلا میشه 3، خب دوباره به بالا بر میگردیم مقدار برابر 3 شد و دوباره ضرب در 3 میشه 9 ،
که جواب نهایی ما هست
راه آنلاین و سریعی واسه این کار سراغ ندارم ولی خب امیدوارم صحبت ها بهتون کمک بکنه
موفق باشید
-
تعداد تشکر ها از*Mr.Mehdi* به دلیل پست مفید
-
September 27th, 2018, 17:50
#3
پاسخ : تحلیل و تفسیر خط به خط کد php ممکن است؟
در تکمیل صحبت های ایشون میتونم اینطوری براتون توضیح بدم که اون n-1 رو شما یک لوپ در نظر بگیر که 3 رو در خودش ضرب میکنه تا جایی که n = 1 باشه و باز هم در خودش ضرب میشه به خاطر if
مثلا عبارت زیر
میشه
کد PHP:
3 * 3 * 3 * 3 * 1
-
تعداد تشکر ها از hoka به دلیل پست مفید
-
September 27th, 2018, 19:47
#4
عضو انجمن
پاسخ : تحلیل و تفسیر خط به خط کد php ممکن است؟
-
-
September 27th, 2018, 20:46
#5
عضو انجمن
پاسخ : تحلیل و تفسیر خط به خط کد php ممکن است؟
سلام
فکر میکنم دوستان به جای اینکه ابزار تحلیل و آنالیز اجرا رو به شما معرفی کنند، خودشون برای شما اینکارو انجام دادن!
----
قطعا نیاز شما با XDebug حل میشه.
مخصوصا قابلیت function trace:
https://xdebug.org/docs/execution_trace
-
تعداد تشکر ها از JeyServer به دلیل پست مفید
-
September 27th, 2018, 20:51
#6
عضو انجمن
پاسخ : تحلیل و تفسیر خط به خط کد php ممکن است؟

نوشته اصلی توسط
JeyServer
سلام
فکر میکنم دوستان به جای اینکه ابزار تحلیل و آنالیز اجرا رو به شما معرفی کنند، خودشون برای شما اینکارو انجام دادن!
----
قطعا نیاز شما با XDebug حل میشه.
مخصوصا قابلیت function trace:
https://xdebug.org/docs/execution_trace
بخش دیباگینگ ide هایی مثل phpstorm هم خوبه . میشه خط به خط دستورات رو اجرا کرد و تغیرات متغیر هارو مشاهده کرد و بهتر تحلیل کرد کد های دیگرانو.
-
تعداد تشکر ها از masih_enter به دلیل پست مفید
-
September 27th, 2018, 21:35
#7
عضو انجمن
پاسخ : تحلیل و تفسیر خط به خط کد php ممکن است؟

نوشته اصلی توسط
JeyServer
سلام
فکر میکنم دوستان به جای اینکه ابزار تحلیل و آنالیز اجرا رو به شما معرفی کنند، خودشون برای شما اینکارو انجام دادن!
----
قطعا نیاز شما با XDebug حل میشه.
مخصوصا قابلیت function trace:
https://xdebug.org/docs/execution_trace
من از phpstorm استفاده میکنم xdebug هم نصب کردم
حالا چطوری این قابلیت رو میشه فعال کرد؟
- - - Updated - - -

نوشته اصلی توسط
*Mr.Mehdi*
سلام این فانکشنی که شما نوشتی به صورت بازگشتی یا recursive هست و درک کارکرد اینطور موارد کمی سخته
می تونید این فانکشن را تریس کرده و با رسم درخت بازگشت جوابش رو بدست بیارید
مثلا اون قسمتی که گفتین چه کاری انجام میده ، فرض کنید با مقدار 3 این فانکشن فراخوانی بشه ، میرسیم به
کد PHP:
return 3 * xxx(3-1)
و اینجا دوباره فانکشن با مقدار 2 فراخوانی میشه
کد PHP:
return 3 * xxx(2-1)
و در این مرحله چون فانکشن با مقدار 1 فراخوانی میشه و داخل شرط نوشتیم اگر $n مساوی با 1 بود 1 برگشت داده بشه مقدار 1 رو داریم که
مقدار 1 رو به ما میده از طرفی در 3 ضرب میشه و کلا میشه 3، خب دوباره به بالا بر میگردیم مقدار
برابر 3 شد و دوباره ضرب در 3 میشه 9 ،
که جواب نهایی ما هست
راه آنلاین و سریعی واسه این کار سراغ ندارم ولی خب امیدوارم صحبت ها بهتون کمک بکنه
موفق باشید
وقتی شرط if رو اجرا میکنه، چطوری برمیگرده else رو هم اجرا میکنه؟ حلقه روی فانکشن اجرا میشه؟
ویرایش توسط سیدرضا بازیار : September 27th, 2018 در ساعت 21:40
-
-
September 27th, 2018, 22:08
#8
پاسخ : تحلیل و تفسیر خط به خط کد php ممکن است؟

نوشته اصلی توسط
سیدرضا بازیار
وقتی شرط if رو اجرا میکنه، چطوری برمیگرده else رو هم اجرا میکنه؟ حلقه روی فانکشن اجرا میشه؟

در هر بار اجرا if و else که فقط یکیشون اجرا میشه و قسمت if هم حالت پایه فانکشن هست ، یعنی وقتی تابع با عدد 1 فراخوانی شد یه مقدار ثابت 1 رو برگشت داده میشه که اگر این شرط نباشه
تابع میفته داخل یه حلقه و هیچ وقت به پایان نمیرسه و اصطلاحا stackoverflow رخ میده
فکر میکنم عمده مشکل شما برمیگرده به اینکه مفهوم توابع بازگشتی رو بلد نیستین، که اگر سرچ کنید در موردشون و مطالبی بخونید صد در صد به فهم قطعه کدی که نوشتین کمک میکنه
موفق باشید
-
تعداد تشکر ها از *Mr.Mehdi* به دلیل پست مفید
-
September 27th, 2018, 22:29
#9
عضو انجمن
پاسخ : تحلیل و تفسیر خط به خط کد php ممکن است؟
-
-
September 27th, 2018, 22:38
#10
عضو انجمن
پاسخ : تحلیل و تفسیر خط به خط کد php ممکن است؟

نوشته اصلی توسط
*mr.mehdi*
در هر بار اجرا if و else که فقط یکیشون اجرا میشه و قسمت if هم حالت پایه فانکشن هست ، یعنی وقتی تابع با عدد 1 فراخوانی شد یه مقدار ثابت 1 رو برگشت داده میشه که اگر این شرط نباشه
تابع میفته داخل یه حلقه و هیچ وقت به پایان نمیرسه و اصطلاحا stackoverflow رخ میده
فکر میکنم عمده مشکل شما برمیگرده به اینکه مفهوم توابع بازگشتی رو بلد نیستین، که اگر سرچ کنید در موردشون و مطالبی بخونید صد در صد به فهم قطعه کدی که نوشتین کمک میکنه
موفق باشید
مشکل اصلی اینه که کد من بسیار پیچیده تر از این کد هست
فقط کد رو ساده کردم تا مفهوم دقیق رو متوجه بشم
دارم یه سیستم رو بر پایه فرمول هایی مینویسم واسه محاسبات فرمول های پیشرفته ریاضیات...
الان وقتی فرمول ها رو وارد توابع بازگشتی میکنم به شدت هنگ میکنم
کاش میشد یه ابزار کمکی استفاده کرد
-