webForumDet fria alternativet

Anropa funktion från en annan funktion

PHP

6 svar · 1 618 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#1

Jag har en kundvagn. I kundvagnsklassen har jag en funktion som returnerar totalpriset enligt följande:

<?
function showTotal($d){
  foreach ($_SESSION['cart'] as $item => $p)
    $price += $_SESSION['cart'][$item]['totalPrice'];

  // ** Rabatt vid förskottbetalning
  if ($d){
    $price *= 0.9

  return $price;
}
?>

För att få priser i rätt format använder jag en annan funktion på andra ställen på sidan (se den här tråden).

<?
function showPrice($price, $d){
  // ** Rabatt vid förskottbetalning
  $f = 0.9;

  // ** Räknar ut förskottspris
  if ($d)
    $price*=$f;

  // ** Rätt antal decimaler
  if (ereg("\\.",$price))
    $price = number_format($price, 2);

return $price;
}
?>

Nu vill jag använda anropa showPrice-funktionen från showTotal-funktionen för att även få totalpriset i rätt format men jag kan inte få det att funka. Förslag?

Medlem sedan dec. 2001314 inlägg
#2

Prova detta istället för "fullösningen":

if (intval($price) == $price) {
    // $price är heltal
}

Angående din fråga så har jag inte en clue.

Medlem sedan nov. 200013 890 inlägg
#3

Tack! Det funkar bra. Så här blir det då:

<?
function showPrice($price, $d){
	// ** Rabatt vid förskottbetalning
	$f = 0.9;
	// ** Räknar ut förskottspris
	if ($d)
		$price*=$f;
	// ** Rätt antal decimaler
	if (!(intval($price) == $price))
		$price = number_format($price, 2);

	return $price;
}
?>

Men som sagt - grundfrågan kvarstår...

Medlem sedan aug. 20002 975 inlägg
#4

Tycker det borde funka med:

function showTotal($d){
  foreach ($_SESSION['cart'] as $item => $p)
    $price += $_SESSION['cart'][$item]['totalPrice'];

  // ** Rabatt vid förskottbetalning
  if ($d){
    $price *= 0.9
  }

  $price = showPrice($price, false);

  return $price;
}
Medlem sedan nov. 200013 890 inlägg
#5

Jag visste väl att det inte skulle va så svårt. :)
sä här blev det nu:

<?
function showTotal($d){
	foreach ($_SESSION['cart'] as $item => $p)
		$price += $_SESSION['cart'][$item]['totalPrice'];
	$price = showPrice($price, $d);
	return $price;
}

function showPrice($price, $d){
	// ** Rabatt vid förskottbetalning
	$f = 0.9;
	// ** Räknar ut förskottspris
	if ($d)
		$price*=$f;
	// ** Rätt antal decimaler
	if (!(intval($price) == $price))
		$price = number_format($price, 2);

	return $price;
}
?>

Jag hade försökt på liknande sätt tidigare men jag missade en grej när jag ropade på funktionen:

<?
showPrice($price, $d); // Fel
$price = showPrice($price, $d); // Rätt
?>

Tack!

Medlem sedan aug. 20002 975 inlägg
#6

Det borde t.o.m. gå att returnera direkt, utan att lägga i variabeln:

return showPrice($price, $d);
Medlem sedan nov. 200013 890 inlägg
#7

Jodå, det funkade det också. Tack!

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)