PDA

View Full Version : ایجاد function با وضعیت متفاوت پارامتر ورودی



bade saba
دوشنبه 28 فروردین 1391, 12:07 عصر
سلام
من میخام یه تابع داشته باشم که با یه نام شرایط مختلفی برای ورود پارامترها داشته باشه. من سرچ که کردم مثلا به این ساختار رسیدم که


function test($name,$family = null)
{
if($family==null)
echo $name;
else
echo $name." ".$family;
}

که در این حالت میشه به دو صورت

test("aaa");
test("bbb","zzz");

تابع رو فراخانی کرد و مشکلی بر نخوریم اما مساله اینه که اگه نوع متغییر ها رو تعیین بکنیم و تعداد متغییر ها هم زیاذ بشه چک کردنش سخت میشه و همچنین موقع نشون دادن تابع فردی که قبلا اصل تابع رو ندیده متوجه نمیشه که المان دوم اختیاریه اما تو حالتهای پیشفرض توابع php با نشون دادن تابع مثلا به شکل زیر نشون میده المان دوم رو میشه وارد نکرد


test($name[,$family]);

چجوری باید همچین حالی رو ایجاد کرد

farhadfery
دوشنبه 28 فروردین 1391, 12:27 عصر
تو php حالت overload کردن تابع را نداریم و لی از همین default parameters که گفتید می شه استفاده کرد. در مورد نوع پارامتر هم این موضوع تو php که مطرح نیست!! که نوع آرگومان را باید مشخص کنید!!
در مورد تعداد متغییرها هم که زیاد. پیشنهاد من اینکه: آرایه ارسال کنید. کلید و value. تو بدنه تابع چک کن اگر این کلید هست؛ مقدار انرا بگیر و کارت را انجام بده

farhadfery
دوشنبه 28 فروردین 1391, 12:29 عصر
مچنین موقع نشون دادن تابع فردی که قبلا اصل تابع رو ندیده متوجه نمیشه که المان دوم اختیاریه اما تو حالتهای پیشفرض توابع php با نشون دادن تابع مثلا به شکل زیر نشون میده المان دوم رو میشه وارد نکرد
متوجه می شه. خود php editor, هنگام استفاده از این تابع, پارامتر که defualt value داره را تو براکت می گذاره

bade saba
دوشنبه 28 فروردین 1391, 12:46 عصر
تو php حالت overload کردن تابع را نداریم

اگه همچین چیزی وجود نداره پس اینهمه تابع default در php که این حالت رو دارن چجوری ایجاد شدن؟؟؟


در مورد نوع پارامتر هم این موضوع تو php که مطرح نیست!! که نوع آرگومان را باید مشخص کنید!!

منظور من تعریف نوع تابع نبود که مطرح نیست منظورم این بود که مثلا اگه آرایه بود یه جور برخورد کنه اگه مثلا string بود یه شکل دیگه نیاز به چک کردن داره که با زیاد شدن پارامترها کار پیچیده میشه.

با این موضوع که فردی که اصل تابع رو ندیده نمیفهمه کدوم المانها رو میتونه وارد نکنه و یا بفهمه که به این المان میتونه آرایه هم علاوه بر مثلا یه string ارسال کنه چه باید کرد؟؟؟

bade saba
دوشنبه 28 فروردین 1391, 12:53 عصر
85834
متوجه می شه. خود php editor, هنگام استفاده از این تابع, پارامتر که defualt value داره را تو براکت می گذاره

والا این DW ما که متوجه نمیشه.

farhadfery
دوشنبه 28 فروردین 1391, 12:54 عصر
اگه همچین چیزی وجود نداره پس اینهمه تابع default در php که این حالت رو دارن چجوری ایجاد شدن؟؟؟
می شه مثال بزنید؟

این موضوع که فردی که اصل تابع رو ندیده نمیفهمه کدوم المانها رو میتونه وارد نکنه و یا بفهمه که به این المان میتونه آرایه هم علاوه بر مثلا یه string ارسال کنه چه باید کرد؟؟؟
قبل از فانکشنت کامنت بگذار و راهنمایی بگذار. شما اولین نفر نیستید که از این روش استفاده می کنید!!

farhadfery
دوشنبه 28 فروردین 1391, 12:56 عصر
85834
والا این DW ما که متوجه نمیشه.

منظورم یه phpeditor قوی و خوب بود!! از کی تاحالا DW شده php edtior قوی!!.
DW برای HTML , CSS خوبه.

MMSHFE
دوشنبه 28 فروردین 1391, 12:59 عصر
کی گفته PHP امکان Overload نداره؟


function sample() {
$output = '';
foreach(func_get_args() as $value) {
$output .= '<p>'.value.'</p>';
}
echo $output;
}
sample('Hello', 'World', 'This', 'Is', 'A', 'Test');

میتونید با gettype نوع هرکدوم از پارامترها رو دریافت کنید.

farhadfery
دوشنبه 28 فروردین 1391, 13:02 عصر
منظور من
http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage% 2Fref%2Fcplr312.htm
هست که گفتم نداره

MMSHFE
دوشنبه 28 فروردین 1391, 13:12 عصر
خوب همین دیگه:


<?php
function prn($var = null) {
switch(strtolower(gettype($var))) {
case 'int':
case 'integer':
echo 'Here is int '.$var.'<br/>'.PHP_EOL;
break;
case 'double':
case 'float':
echo 'Here is float '.$var.'<br/>'.PHP_EOL;
break;
case 'string':
echo 'Here is string \''.$var.'\'<br/>'.PHP_EOL;
break;
case 'bool':
case 'boolean':
echo 'Here is boolean '.($var ? 'true' : 'false').'<br/>'.PHP_EOL;
break;
case 'null':
echo 'Here is NULL<br/>'.PHP_EOL;
break;
}
}
prn(5);
prn(5.2);
prn('ali');
prn(true);
prn();
?>

تازه اینطوری که بهتر از چندبار نوشتن تابع هست. بار آخری باشه حرف از نقص PHP میشنوم، من رو PHP غیرتیم ها :چشمک:

farhadfery
دوشنبه 28 فروردین 1391, 13:25 عصر
شما دارید خودتون دستی شبیه سازی می کنید. bultin که نداره.:چشمک:
بالاخره هر زبانی ضعف و قدرت داره!

bade saba
دوشنبه 28 فروردین 1391, 13:35 عصر
منظورم یه phpeditor قوی و خوب بود!! از کی تاحالا DW شده php edtior قوی!!.
DW برای HTML , CSS خوبه.

والا من خیلی تجربه تو php ندارم که بخام براتون دلیل بیارم وقتی میخاستم شروع کنم یه سرچ کردم و مثلا به http://php-editor-review.toptenreviews.com/ رسیدم و سایتهای مشابهی که رنکینگهایی داشتن که DW توی اونا وجود داشت

یا این تاپیک (http://barnamenevis.org/showthread.php?332156-%D9%85%D9%86%D8%A7%D8%B3%D8%A8-%D8%AA%D8%B1%DB%8C%D9%86-%D9%85%D8%AD%DB%8C%D8%B7-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-PHP-%DA%86%DB%8C-%D9%87%D8%B3%D8%AA%D8%9F) که از DW به عنوان یه ادیتور خوب نام برده شده

bade saba
دوشنبه 28 فروردین 1391, 13:41 عصر
می شه مثال بزنید؟

منظور من حالتی بود که مثلا در اون عکسی که من گزاشتم برای سومین خط وجود داره که تابع php هست و اون حالتی که من میگم رو هم داره و با اون شکل بدون کامنت هم میشه خیلی چیزا رو از شکلش فهمید

MMSHFE
دوشنبه 28 فروردین 1391, 15:10 عصر
شما دارید خودتون دستی شبیه سازی می کنید. bultin که نداره.:چشمک:
بالاخره هر زبانی ضعف و قدرت داره!
دوست عزیز، هدف از Overload چیه؟ مگه این نیست که یک تابع بتونه پارامترهایی با انواع مختلف متغیر رو بگیره و برحسب نوع متغیر کارهای مختلفی انجام بده؟ خوب توی PHP چون به نوع متغیر حساس نیست، نیازی به تعریف مجدد تابع و تکرار کلمات function و اسم تابع و... نیست و فقط داخل تابع چک میکنیم و برحسب نوع، کارهای لازم رو انجام میدیم. مگه Overload چیزی غیر از اینه یا اگه ساختار Overload یک زبان مثل C نبود دیگه اسمش Overload نیست؟ همونجا توی C هم دستی انجام میشه دیگه. با پا که انجام نمیدیم :چشمک:
تازه اینجا توی PHP کار منطقی تر و اصولی تر و در عین حال راحتتره.
موفق باشید.

MMSHFE
دوشنبه 28 فروردین 1391, 16:33 عصر
منظور من حالتی بود که مثلا در اون عکسی که من گزاشتم برای سومین خط وجود داره که تابع php هست و اون حالتی که من میگم رو هم داره و با اون شکل بدون کامنت هم میشه خیلی چیزا رو از شکلش فهمید
مشکل شما با PHPDOC (http://www.phpdoc.org/) حل میشه.