pary_daryayi 181 ارسال شده در مرداد 92 گزارش بازنشر ارسال شده در مرداد 92 تابع هایی که تو در تو هستند رو چرا نمیشه بیش از یک بار فراخوانی کرد ؟پس فایده ی اونها چیه ؟function a() { function b() { echo 'I am b'; } echo 'I am a';}a();a();تو منوال نوشته :As you might NOT expect, the second call to a() fails with a "Cannot redeclare b()" error. This behaviour is correct, insofar as PHP doesn't "allow functions to be redefined."بعد اینطور هم نوشته :function a() { if ( ! function_exists('b') ) { function b() { echo 'I am b'; } } echo 'I am a';}ولی باز هم نمیشه دو بار فراخوانی کرد ؟ علتش چیه ؟ و کاربردش ؟ممنونم. نقل قول لینک به ارسال
imanfakhar 26231 ارسال شده در مرداد 92 گزارش بازنشر ارسال شده در مرداد 92 برای اینکه php هنگام ساخت صفحه توابعش رو می خونه و بر اساس شرایط اونها صفحه را می سازه یعنی یا صفحه را بر اساس روال if ( ! function_exists('b') می سازه و یا برای حالت else در فراخوانی دوم شرط عملا وجود نداره برای توابع اینچنینی باید تابع را در جاوا اسکریپت ساخت که کل کد همیشه همراه صفحه باشه و یا در تعریف تابع تو برای هر نتیجه یک تابع مجزا هم نوشت 3 نقل قول لینک به ارسال
pary_daryayi 181 ارسال شده در مرداد 92 مالک گزارش بازنشر ارسال شده در مرداد 92 میدونید , خوب متوجه نشدم !کد دوم میگه اگر فانکشن b وجود نداره اونو ایجاد کن , ولی باز هم تابع a رو نمیشه بار دوم فراخوانی کرد .. نقل قول لینک به ارسال
mehral 785 ارسال شده در مرداد 92 گزارش بازنشر ارسال شده در مرداد 92 کد کار میکنه function a() {if ( !function_exists('b')) { function b() { echo "This is function b.<br />"; }}echo "This is function a.<br />";}a();a();a();اینم خروجیش http://69.195.223.90/0e355-2/ 1 نقل قول لینک به ارسال
mehral 785 ارسال شده در مرداد 92 گزارش بازنشر ارسال شده در مرداد 92 یه جاش رو اشتباه نوشتم function a() { if ( !function_exists('b')) { function b() { echo "This is function b. ---"; }}b();echo "This is function a.<br />";}a();a();a();خروجی http://69.195.223.90/26b68-2/ 1 نقل قول لینک به ارسال
pary_daryayi 181 ارسال شده در مرداد 92 مالک گزارش بازنشر ارسال شده در مرداد 92 درسته.سوال من اینه که چرا تو کد اول , دفعه ی اول نمیگه b رو نمیشناسه , ولی دفعه ی دوم میگه .وقتی ما تابع a رو صدا میکنیم , همزمان باهاش تابع b هم ساخته میشه , نمیشه ؟حالا چه بار اول باشه چه بار دوم , سوم و ...function a() { function b() { echo 'I am b'; } echo 'I am a';}a();b();a();ما هیچ وقت در حالت معمولی , اول تابع رو چک نمیکنیم که ببینیم وجود داره یا نه , که اگر وجود نداشت اونو ایجاد کنیم .ما همین که ایجاد میکنیم و فراخوانی , ساخته میشه دیگه. نقل قول لینک به ارسال
imanfakhar 26231 ارسال شده در مرداد 92 گزارش بازنشر ارسال شده در مرداد 92 من فکر کنم هنوز هم متوجه منظور شما نشدم در این کدی که نوشتید فرمول a اجرا شدن فرمول b است و فرمول b به تنهایی پاسخی نداره و فقط در دل a ساخته می شود اگر می خواهید بعد از ساخته شدن a و b گاهی a را صدا بزنید و گاه b باید به سراغ js بروید و الا هم که همیشه در هنگام ساختن صفحه به هر تعداد می توانید a را صدا بزنیداما در حالتی که b را مثلا شرطی کنید پاسخ شنما می شود اگر فرمول b اجرا شد پاسخ فرمول a هم فرمول b باشد و الا پاسخ a چیز دیگریست 2 نقل قول لینک به ارسال
pary_daryayi 181 ارسال شده در مرداد 92 مالک گزارش بازنشر ارسال شده در مرداد 92 (ویرایش شده) سوال من اینه که چرا دفعه ی اول که a رو صدا میزنم خطا نمیگیره , ولی دفعه ی دوم به بعد خطا میگیره . ( کد اول ) ویرایش شده مرداد 92 توسط pary_daryayi نقل قول لینک به ارسال
AliRezaPro 260 ارسال شده در مرداد 92 گزارش بازنشر ارسال شده در مرداد 92 دلیل استفاده تابع بصورت NESTED چیه ؟ بعضی از دلایل واقعا جالب نیستندمثلا این دلیل :namespace String;if (\MULTIBYTE_MODE) {function Length($string) {return strlen($string);}} else {function Length($string) {return mb_strlen($string);}}استفاده از تابع به این صورت فقط از ذهن یک الگوریتم اشتباه بر میاد ,چرا که میشه همین کد رو بسیار زیباتر و تمیز تر نوشت تا اینکه بخوایم تابع ها رو به این صورت به سخره بگیریم ! چرا که تابع ها رفتار یک کلاس رو تعریف میکنند و در زمان های معین شاید رفتار های متفاوت از خود بروز دهند , جالبه استفاده تابع بصورت Nested یعنی شما رفتار رو بیرون از تابع تعریف میکنی و فقط به تابع میگید که اون کار رو انجام بدید ,بگزارید روشن تر کنم قضیه رو , مثل این میمونه که تو شرایط مختلف به یکی دستور بدید که این کار رو انجام بده یا اون کار رو , در صورتی که میشه خود تصمیم گیری رو هم به شی واگذار کرد تا خودش در زمان های مشخص تصمیم گیری کنه . تو زبان های دیگه من چنین چیزی ندیدم تغریبا , تو سی شارپ هم بصورت مستقیم نمیشه , اما شاید بشه با delegate و لامبادا و آدرس تابع nested رو طراحی کردببینید :static void Main(){ Console.WriteLine("Hello from main."); Func<int, int> NestedMethod = (x) => { Console.WriteLine("In nested method. Value of x is {0}.", x); return x; }; int result = NestedMethod(3);} 3 نقل قول لینک به ارسال
imanfakhar 26231 ارسال شده در مرداد 92 گزارش بازنشر ارسال شده در مرداد 92 این رو تست کن <?phpfunction a() { if ( ! function_exists('b') ) { function b() { echo 'I am b'; } } else { echo 'I am a'; }}a();a();?> 2 نقل قول لینک به ارسال
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .