Switch PHP

Nakon što se kod prevrti - varijabla $razlika postaje 0? Zašto?

<?php $razlika=$total_ura-$total; switch ($razlika){ case ($razlika = 0): $poruka='0 JE '; break; case ($razlika > 0): $poruka='VEĆE JE '; break; case ($razlika < 0): $poruka='MANJE JE '; break; } echo '

UKUPNO POTRAŽIVANJE: '. pretvoriKune($total_ura).'

'; echo '

PLAĆENO DO SADA: '. pretvoriKune($total).'

'; echo '

'.$poruka." ".pretvoriKune($razlika).'

'; ?>

Zbog ovoga.
Vjerojatno si htio napisati $razlika == 0? :smiley:

Ovako si u biti provjerio da li si varijabli $razlika uspješno dodijelio vrijednost 0.

http://php.net/manual/en/language.operators.comparison.php

M. U. T. A. V. S. A. M.!

Hvala!

[quote=“Junior”]Zbog ovoga.
Vjerojatno si htio napisati $razlika == 0? :smiley:

Ovako si u biti provjerio da li si varijabli $razlika uspješno dodijelio vrijednost 0.

PHP: Comparison Operators - Manual[/quote]

Kada vršiš uspoređivanje, kako u C-u, tako i u PHP-u je preporučljivo konstantu staviti lijevo, dakle ovako:

[php]case 0 = $razlika:

// ili

if( 0 = $razlika )[/php]

U obadva navedena slučaja bi dobio porku o pogrešci, kod C-a tijekom prevođenja, a kod PHP-a tijekom izvođenja, zato što se konstanti ne može pridruživati (ne može biti na lijevoj strani operatora pridruživanja).

Osim toga, kada imaš više uzastopnih redaka u kojima uspoređuješ istu varijablu s različitim vrijednostima, na lijevoj strani koju čitaš prvu se nalazi ono bitno - vrijednost s kojom uspoređuješ, a na desnoj ono što je isto u svakoj od slijeda naredbi - naziv varijable.

Zbog čitljivosti se preporučuje i da uvijek koristiš isti operater usporedbe, tj. “<”, jer tako dobijaš zapise čiju je ispravnost lakše provjeravati tijekom inspekcije. Primjerice:

[php]if( 0 <= $varijabla && $varijabla < 100 )
// vizualno indicira da je $varijabla unutar intervala [0,100)

if( $varijabla < 100 || 200 < $varijabla )
// vizualno indicira da je $varijabla izvan intervala (100,200)

// umjesto

if( $varijabla >= 0 && $varijabla < 100 )

if( $varijabla < 100 || $varijabla > 200 ) [/php]

Fala majstore! :slight_smile:

[quote=“tsereg”]Kada vršiš uspoređivanje, kako u C-u, tako i u PHP-u je preporučljivo konstantu staviti lijevo, dakle ovako:

[php]case 0 = $razlika:

// ili

if( 0 = $razlika )[/php]

U obadva navedena slučaja bi dobio porku o pogrešci, kod C-a tijekom prevođenja, a kod PHP-a tijekom izvođenja, zato što se konstanti ne može pridruživati (ne može biti na lijevoj strani operatora pridruživanja).

Osim toga, kada imaš više uzastopnih redaka u kojima uspoređuješ istu varijablu s različitim vrijednostima, na lijevoj strani koju čitaš prvu se nalazi ono bitno - vrijednost s kojom uspoređuješ, a na desnoj ono što je isto u svakoj od slijeda naredbi - naziv varijable.

Zbog čitljivosti se preporučuje i da uvijek koristiš isti operater usporedbe, tj. “<”, jer tako dobijaš zapise čiju je ispravnost lakše provjeravati tijekom inspekcije. Primjerice:

[php]if( 0 <= $varijabla && $varijabla < 100 )
// vizualno indicira da je $varijabla unutar intervala [0,100)

if( $varijabla < 100 || 200 < $varijabla )
// vizualno indicira da je $varijabla izvan intervala (100,200)

// umjesto

if( $varijabla >= 0 && $varijabla < 100 )

if( $varijabla < 100 || $varijabla > 200 ) [/php][/quote]

Čemu uopće uvrštavanje operator i/ili uvjeta u case? Nema smisla.

[php]switch (1)
{
case 1 == 0: echo “hello world”; break; // nema smisla
case 1: echo “hello world again”; break; // ima smisla
}[/php]

Ali tvoj problem rješiš ovako:

[php]$razlika = $total_ura - $total;

if ($razlika == 0) $poruka = '0 JE ';
else if ($razlika > 0) $poruka = 'VEĆE JE ';
else $poruka = 'MANJE JE ';

echo ‘

UKUPNO POTRAŽIVANJE: ‘. pretvoriKune($total_ura).’


’;
echo ‘

PLAĆENO DO SADA: ‘. pretvoriKune($total).’


’;
echo ’

‘.$poruka." ".pretvoriKune($razlika).’


’;[/php]

Još možeš dodati neku funkciju što provjerava da je $razlika broj.

[quote=“jcrnkovic”]Čemu uopće uvrštavanje operator i/ili uvjeta u case? Nema smisla.[/quote]Lijepo si to uočio. :slight_smile:

Izvorno je bilo napisano, pa sam i ja samo prepisao bez razmišljanja.

To bi trebalo biti neispravno ili rezultirati nečim neočekivanim. Drugim riječima, izrazi napisani u “case” klauzulama bi se trebali izačunati i onda vrijednost varijable iz “switcha” uspoređivati s tim izračunatim vrijednostima. Prvi izvorno napisani izraz ($razlika = 0) evaluira u vrijednost 0, a preostala dva u istinu ili laž, te se potom redom uspoređuju s vrijednosti varijable $razlika (uz implicitnu konverziju tipova gdje je potrebno). Osim, naravno, ako sintaksa PHP-a ne takav zapis, u kojem slučaju bi se trebala javiti pogreška.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja