PDA

View Full Version : استفاده از تابع



Salazar.mi
جمعه 17 آبان 1398, 20:43 عصر
سلام
واقعا شرمندم این سوال را میپرسم
ولی واقعا نمیدونم چرا درست نمیشه
من یه سری آرایه دارم به اسم های
move1,move2,....
که اینارا بالا تعریف کردم
اولش این آرایه ها مقدارشون خالیه اما بعد از اینکه از یه سری if else میگذره بعضی از این move ها مقدار میگیرن
ممکنه این moveها مقدار بگیرن ممکن هم هست مقداری نگیرین
بعدش میام مثلا یک تابع تعریف میکنم که نیاز داره به اون move ها
مثلا fun1 برای اجرا شدن نیاز داره به move1


function fun1()
{
if($move1)
{
code
}
}


بعدش یه if دارم مثلا این


if($vj1<${"vj$k"})
{
fun1();
}

ولی به جای اینکه fun1 اجرا بشه اررور میده که تو خطی که نوشتم


if($move1)

move1 را نمیشناسم
من آخر نفهمیدم از این تابع ها چجوری میشه استفاده کرد
شرمندم واقعا
ولی من تقریبا همه کدمو نوشتم البته با کمک ویژه شما دوستان
قسمت های آخرشه اگر بتونم این مشکلات را حل کنم تمومه
ممنون میشم کمکم کنید

ASHKANLAEI
جمعه 17 آبان 1398, 21:00 عصر
چک کنید ببینید این میشه؟

if (isset($move1))

Salazar.mi
جمعه 17 آبان 1398, 21:11 عصر
چک کنید ببینید این میشه؟

if (isset($move1))
بی نهایت ممنونم که جواب دادین
دیگه اررور نمیده
ولی هیچکدوم از fun را اجرا نمیکنه
یعنی کارهایی که بعد از


if(isset($move1))

نوشتم انجام نمیده
جتی یه


echo "ok";

را هم انجام نمیده

Salazar.mi
جمعه 17 آبان 1398, 21:14 عصر
var_dump($move1);

مقدار داره
ولی کارهای بعد از isset را انجام نمیده

ASHKANLAEI
شنبه 18 آبان 1398, 06:16 صبح
این یکی چی؟

if (!empty($move1))

Salazar.mi
شنبه 18 آبان 1398, 14:32 عصر
این یکی چی؟

if (!empty($move1))
همون جوریه کارهای بعد از if را انجام نمیده

hobab-theme
یک شنبه 19 آبان 1398, 00:49 صبح
if($move1)
اگر move1 چی؟
شما درست و کامل به برنامه نگفتید که باید چکار کنه و اونم نمیدونه چکار کنه متوقف میشه
هدفتون دقیقا چیه

ASHKANLAEI
یک شنبه 19 آبان 1398, 06:20 صبح
همون جوریه کارهای بعد از if را انجام نمیده
به نظرم ممکنه مشکل از جای دیگه ای باشه، شما بیاین empty , isset رو بنویسید تو صفحه ببینید مشکل از اون ها است یا نه؟

plague
یک شنبه 19 آبان 1398, 19:08 عصر
تابع به متغیر های بیرون از اسکوپ خودش دسترسی نداره .... منظور از اسکوپ همون { } جلوش هست
شما اگه بیرون از تابع یک متغیر تعریف کردی توی تابع نمیتونی بهش دسترسی پیدا کنی همینجوری
2 راه داره یا باید به صورت آرگومان براش بفرستی


تابعت رو باید اینجوری تعریف کنی


function fun1( $move1 )
{
if($move1)
{
code
}
}

بعد وقتی صداش میزنی متغیر رو بهش پاس بدی




fun1( $move1 );

یا اینکه از کلید global آستفاده کنی برای متغیر تا تابع بتونه بهش دسترسی پیدا کنه


function fun1( )
{
global $move1 ;

if($move1)
{
code
}
}



مورد دیگه اینکه



if($move1)

چک میکنه که یک متغییر false یا true هستش
اگه شما یه آرایه داری که میخای چک کنی پر باشه باید اینجوری بنویسی


if(!empty($move1))

Salazar.mi
یک شنبه 19 آبان 1398, 20:56 عصر
از همه شما واقعا ممنونم
بی نهایت سپاسگذارم
حقیقتا فکر کنم اشکال کار همون چیزی هست که
plague (https://barnamenevis.org/member.php?123420-plague) گفتن
ولی من از راهکارهاشون استفاده کردم اینکه move1 را به صورت ورودی به تابع بدهم ولی باز هم کلی اررور داد
چون در ادامه کدها هم دوباره میخواد از یه آرایه دیگه ای به اسم a استفاده کنه و باز هم اررور میده که من آرایه a را نمیشناسم
آیا امکان داره که چیزی شبیه به global که برای متغیر وجود دارد برای آرایه هم وجود داشته باشه

Salazar.mi
یک شنبه 19 آبان 1398, 20:57 عصر
اگر move1 چی؟
شما درست و کامل به برنامه نگفتید که باید چکار کنه و اونم نمیدونه چکار کنه متوقف میشه
هدفتون دقیقا چیه
این کل کدییه که مثلا برای fun1 میخوام اجرا بشه


function fun1($move1)
{
if(!empty($move1))
{
//جای دو خانه را با هم عضو کن
$tmp = $a[$move1[0]][$move1[1]];
$a[$move1[0]][$move1[1]] = $a[$move1[4]][$move1[5]];
$a[$move1[2]][$move1[3]] = 0;
$a[$move1[4]][$move1[5]] = $tmp;


unset($tmp);
$w0=$w0j1;
$w1=$w1j1;
$w2=$w2j1;
$w3=$w3j1;
$w4=$w4j1;
$w5=$w5j1;
$w6=$w6j1;
// kblue
if($a[0][$j]===1)
{
$data=3;
}
// kred
if($a[7][$j]===2)
{
$data=4;
}
$red = $blue = $kblue = $kred =0;
array_walk_recursive($a, function($t) use(&$red, &$blue, &$kblue, &$kred)
{
if($t==1) {++$blue;}
elseif($t==2) {++$red;}
elseif($t==3) {++$kblue;}
elseif($t==4) {++$kred;}
});
$tred=0;
if($data===2 && $db===1 && $dg===0 || $data===2 && $dbg===1 && $dgb===0)
{
$tred++;
}


$tblue=0;
if($data===1 && $dbg===2 && $dgb===0 || $data===1 && $db===2 && $dg===0)
{
$tblue++;
}


$v=$w0+($w1*$blue)+($w2*$red)+($w3*$kblue)+($w4*$k red)+($w5*$tblue)+($w6*$tred);
}
}

ASHKANLAEI
دوشنبه 20 آبان 1398, 14:28 عصر
از همه شما واقعا ممنونم
بی نهایت سپاسگذارم
حقیقتا فکر کنم اشکال کار همون چیزی هست که
plague (https://barnamenevis.org/member.php?123420-plague) گفتن
ولی من از راهکارهاشون استفاده کردم اینکه move1 را به صورت ورودی به تابع بدهم ولی باز هم کلی اررور داد
چون در ادامه کدها هم دوباره میخواد از یه آرایه دیگه ای به اسم a استفاده کنه و باز هم اررور میده که من آرایه a را نمیشناسم
آیا امکان داره که چیزی شبیه به global که برای متغیر وجود دارد برای آرایه هم وجود داشته باشه



اصلاً global برای این دو فرقی نداره

Salazar.mi
چهارشنبه 22 آبان 1398, 13:58 عصر
اصلاً global برای این دو فرقی نداره
ولی وقتی نوشتم


global $move1;

ارور داد

ASHKANLAEI
چهارشنبه 22 آبان 1398, 14:05 عصر
ممکنه ارور از جای دیگری باشه

Salazar.mi
چهارشنبه 22 آبان 1398, 14:34 عصر
ممکنه ارور از جای دیگری باشه
احتمال داره من که دیگه ازش سر در نیاوردم
بی نهایت ممنونم که جواب دادین تشکرات ویژه

plague
چهارشنبه 22 آبان 1398, 20:08 عصر
خب چرا متن اررورت رو نزاشتی ؟!



$tmp = $a[$move1[0]][$move1[1]];


اینجا متغیر $a از کجا اومده ؟



آیا امکان داره که چیزی شبیه به global که برای متغیر وجود دارد برای آرایه هم وجود داشته باشه

متغیر یه فضای حافظه کامپیوتری هستش که توش میتونه حرف باشه یا عدد باشه یا آرایه باشه ..... مثل یه ظرف که توش چیز میریزی

طبیعتا شما میتونی متغیری که توش یه آرایست رو گلوبال کنی