PDA

View Full Version : شمارش متغییر در تابع



spsgorgan
دوشنبه 23 شهریور 1388, 23:40 عصر
سلام
تکه کد زیر رو مشاهده بفرمایید :



function sub ($username) {
$lsum=0;
$rsum=0;
$Link = mysql_connect ($host, $user,$pass);
$Query = "SELECT * from table where col='$username'";
$Result = mysql_db_query ($database,$Query, $Link);
while($Row=mysql_fetch_array($Result)){
if ($Row[lsub]) { $sum++; }
if ($Row[rsub]) { $sum++; }
$lsub=$Row[lsub];
$rsub=$Row[rsub];
echo("$username : $lsub / $rsub = SUM : $sum<br>");
}
if ($lsub != NULL) { sub($lsub); }
if ($rsub != NULL) { sub($rsub); }
}


من چطوری میتونم مقدار نهایی متغییر SUM رو بفهمم !؟ از هیچ راهی نتونستم متغییر ها رو با هم جمع کنم.

ممنونم

spsgorgan
پنج شنبه 26 شهریور 1388, 20:03 عصر
کسی پیشنهادی نداره ؟

s_salavati2002
پنج شنبه 26 شهریور 1388, 20:24 عصر
اگرم می خوای چیز دیگه ای رو returnکنی اونو global کن

spsgorgan
پنج شنبه 26 شهریور 1388, 20:31 عصر
- طرح برتر عزیز مقدار sum ریترن میشه اما فقط مقدار اولی که میگیره
- دوست گرامی کدوم متغییر رو گلوبال کنم ؟

مشکل اینجاست که تابع باید بازگشتی کار کنه . خروجیش عملا صحیحه اما مقدار sum رو نشون نمیده

spsgorgan
پنج شنبه 26 شهریور 1388, 20:55 عصر
میشه مرحمت کنید چون بنده زیاد با کلاس ها آشنایی ندارم اینکارو انجام بدید ؟

شرمنده :)

spsgorgan
پنج شنبه 26 شهریور 1388, 22:02 عصر
طرح برتر عزیز اجالتاً ممکنه شما این کد منو با کلاس بنویسید چون یک مقدار مشکل پیدا کردم سر این کد و نمیتونم الان بحث کلاس ها رو خوب متوجه بشم

spsgorgan
جمعه 27 شهریور 1388, 10:40 صبح
از دوستان کسی دیگه نمیتونه کمک کنه ؟

Yousha
جمعه 27 شهریور 1388, 15:04 عصر
سلام،
باید از Reflection استفاده کنید.
به PHP manual مراجعه کنید.
...
بچه ها لطفاً اسپم نکنید.

s_salavati2002
جمعه 27 شهریور 1388, 15:25 عصر
- طرح برتر عزیز مقدار sum ریترن میشه اما فقط مقدار اولی که میگیره
- دوست گرامی کدوم متغییر رو گلوبال کنم ؟

مشکل اینجاست که تابع باید بازگشتی کار کنه . خروجیش عملا صحیحه اما مقدار sum رو نشون نمیده
اگر می خوای مقدار sum رو همیشه داشته باشی به نظر من global کنی خیلی راحت می تونی همشو باهم جمع کنی
اما خوب oop هم راههای خوبی برای این کار داره که اصولی تره ولی خیلی از پروژه ها از global هم استفاده می کنن

از نظر من هرکسی پیشنهاد خودشو بده خوبه که راههای زیادی برای یک کار بررسی شه و با اسپم نوشتن متفاوته

spsgorgan
جمعه 27 شهریور 1388, 17:35 عصر
اگر می خوای مقدار sum رو همیشه داشته باشی به نظر من global کنی خیلی راحت می تونی همشو باهم جمع کنی
اما خوب oop هم راههای خوبی برای این کار داره که اصولی تره ولی خیلی از پروژه ها از global هم استفاده می کنن

از نظر من هرکسی پیشنهاد خودشو بده خوبه که راههای زیادی برای یک کار بررسی شه و با اسپم نوشتن متفاوته
با گلوبال کردن sum هم نشد . نمیدونم چرا مقدار اولیه sum رو فقط خارج میکنه

s_salavati2002
شنبه 28 شهریور 1388, 00:09 صبح
با گلوبال کردن sum هم نشد . نمیدونم چرا مقدار اولیه sum رو فقط خارج میکنه
global که کردی کدتو بذار

spsgorgan
شنبه 28 شهریور 1388, 16:35 عصر
function sub ($username) {
global sum;
$lsum=0;
$rsum=0;
$Link = mysql_connect ($host, $user,$pass);
$Query = "SELECT * from table where col='$username'";
$Result = mysql_db_query ($database,$Query, $Link);
while($Row=mysql_fetch_array($Result)){
if ($Row[lsub]) { $sum++; }
if ($Row[rsub]) { $sum++; }
$lsub=$Row[lsub];
$rsub=$Row[rsub];
echo("$username : $lsub / $rsub = SUM : $sum<br>");
}
if ($lsub != NULL) { sub($lsub); }
if ($rsub != NULL) { sub($rsub); }
return $sum;
}

spsgorgan
شنبه 28 شهریور 1388, 16:35 عصر
اگر اشکالی هست ممنون میشم روی کد بفرمایید و اصلاح کنید

Yousha
شنبه 28 شهریور 1388, 16:55 عصر
به این شکل بنویسید تا خوانایی و بهینه بودن کدتون بالا بره:


function sub($username)
{
global sum;

$lsum= 0;
$rsum= 0;
$Link = mysql_connect("{$host}:3306", $user, $pass);
$Result= mysql_db_query($database, "SELECT * FROM `table` WHERE col= '{$username}';", $Link);

while($Row = mysql_fetch_array($Result))
{
if($Row[lsub]): $sum ++;
endif;
if($Row[rsub]): $sum ++;
endif;
$lsub= $Row[lsub];
$rsub= $Row[rsub];
echo("{$username}: {$lsub} / {$rsub}= SUM: {$sum}<br/>");
};

if($lsub): sub($lsub);
endif;
if($rsub): sub($rsub);
endif;
return($sum);
}

سعی کنید همیشه بجای نام هاست، IP هاست رو قرار بدید... اینجوری سرعت اتصال بالا میره.

spsgorgan
شنبه 28 شهریور 1388, 20:47 عصر
با سپاس از شما اما هنوز مشکل sum هست. یعنی تنها اولین مقدار sum برگشت داده میشه

spsgorgan
یک شنبه 29 شهریور 1388, 17:23 عصر
اگر ریزالت نداشت که مقدار اول هم نمیداد . مضافا که من اطلاعات رو در db ریختم و باید همونها رو برگردونه پس اینکه میفرمایید نتیجه منتفی هست .

ممنونم

spsgorgan
سه شنبه 31 شهریور 1388, 13:36 عصر
از دوستان کسی ایده دیگه ای نداره ؟