Vyhodnocování podmínek – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vyhodnocování podmínek – PHP – Fórum – Programujte.comVyhodnocování podmínek – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Míša
~ Anonymní uživatel
105 příspěvků
2. 7. 2009   #1
-
0
-

Chtěl jsem se zeptat, dá se nějak PHP přinutit aby při vyhodnocování podmínek prošlo celou podmínku?

Například:

if ( true || print( 'HELLO ' ) )

{
echo 'WORLD!';
}


Tohle vypíše pouze "WORLD!" protože vyhodnocování or zkončí při první hodnotě true (a and při první hodnotě false).




Nahlásit jako SPAM
IP: 88.102.27.–
Reklama
Reklama
z_moravec
~ Redaktor
+3
Posthunter
2. 7. 2009   #2
-
0
-

A čeho přesně chceš dosáhnout? Resp. k čemu to má být dobré?

Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
2. 7. 2009   #3
-
0
-

To Míša : Tak je přehoď... a jako první se Ti vyhodnotí to print();

Nahlásit jako SPAM
IP: 212.77.163.–
Spectator0
Věrný člen
2. 7. 2009   #4
-
0
-

To Míša : Ehm > pokud použiješ logický operátor OR (nebo) tak je naprosto jasné, že to při prvniv True skončí, protože proč by to vubec pokračovalo, stačí jedna NEBO druhá varianta.
pokud chceš obě tak nejjednodušší způsob, vnořování.
ale jak píš kolega

z_moravec napsal:
A čeho přesně chceš dosáhnout? Resp. k čemu to má být dobré?


k čemu to, pokud používáš OR tak asi víš proč a takový výstup ti musí stačit.

Nahlásit jako SPAM
IP: 89.176.8.–
. . .
DragonBehemont0
Super člen
2. 7. 2009   #5
-
0
-

To Míša : Akorát mě by třeba zajímal význam této podmínky, protože tru bude vždy pravda, takže i když Ti to print nic nevypíše, tak podmínka bude VŽDY splněna... tudíž tato podmínka nemá žádný smysl.

Nahlásit jako SPAM
IP: 212.77.163.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
Spectator0
Věrný člen
2. 7. 2009   #6
-
0
-

To DragonBehemont : =) To je fakt, jsem na ten kod moc nekoukal :smile1:

Nahlásit jako SPAM
IP: 89.176.8.–
. . .
Míša
~ Anonymní uživatel
105 příspěvků
2. 7. 2009   #7
-
0
-

To co jsem napsal byl jen příklad. Jasně, že se to dá vyřešit vnořenými podmínkami a podobně. Jen jsem se chtěl zeptat jestli to jde i nějak přímo (například nastavit php).

Jde to tohle - při registraci společnosti na server je nutné zadat jak údaje společnosti tak údaje hlavního uživatele (=povinného účtu s vyššími právy vytvářet další uživatele k dané společnosti a podobně, prostě takvého správce společnosti).

Pro přidání uživatele a přídání společnosti mám dvě různé metody, které kontrolují validitu vstupních dat jak pro společnost tak pro uživatele zvlášť. V případě, že jsou nějaká vstupní data zadána špatně potřebuju aby se mi vrátily chyby (které vrací ty metody pro validaci) a zastavit provádění registrace a vypsat chyby.

Přesdtavoval jsem si to jednoduše nějak takhle:



if ( !$this -> AddCheckData( $Data[ 'company' ], $TMPReport[ 0 ] ) || !$this -> User -> RegistrationCheckData( $Data[ 'user' ], $TMPReport[ 1 ] ) )
{
// tady vypíšu report chyb z metod v podmínce - pro zobrazení na formuláři
$Report = Report::Get( $this, 'Add', $TMPResult, $Data, array( 'company' => $TMPReport[ 0 ] -> Errors(), 'user' => $TMPReport[ 1 ] -> Errors() ) , null, $TMPReport );
return false;
}
// pokud bych se dosal sem tak by pokračovalo provádění registrace


Jenže v případě, že by nastala chyba hned v kontrole společností (metada na prvním místě v podmínce) tak by se neprovedla validace uživatelských dat a i v případě, že by v nich byla chyba by se nevypsala dokud by uživatel nevyplnil správně celou část formuláře společnosti a až pak by zjistil že je ještě něco špatně v datech uživatele...

Prostě mě zajímalo jestli se to provádění podmínek dá nějak nastavit. Ono je úplně logické, že se to provádí tak jak se to provádí, ale přecejen je někdy potřeba provést podmínku jinak. :)

Nahlásit jako SPAM
IP: 88.102.27.–
z_moravec
~ Redaktor
+3
Posthunter
2. 7. 2009   #8
-
0
-

A nestačilo by tam dát místo OR operátor AND? Pak budou muset být splněny obě podmínky a nemusíš řešit pořadí.

Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
DragonBehemont0
Super člen
2. 7. 2009   #9
-
0
-

No, a co kdyby si změnil logiku? Teďkom jen obrazně:



if($podminka1 && $podminka2 && $podminka3 && $podminka4)
{
echo "Všechny podmínky splněny :-)";
} else {
if(!$podminka1) {
echo "Není splněna podmínka 1";
}
if(!$podminka2) {
echo "Není splněna podmínka 2";
}
if(!$podminka3) {
echo "Není splněna podmínka 3";
}
if(!$podminka4) {
echo "Není splněna podmínka 4";
}
}

Nahlásit jako SPAM
IP: 212.77.163.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
Míša
~ Anonymní uživatel
105 příspěvků
2. 7. 2009   #10
-
0
-

z_moravec napsal:
A nestačilo by tam dát místo OR operátor AND? Pak budou muset být splněny obě podmínky a nemusíš řešit pořadí.



Řekl bych že to bude to samé. Funkce vrací false pokud je někde chyba a to co jsem psal by vypadá zjednodušeně takhle:

if ( !funkce1() || !funkce2() ) //pokud je funkce1 false nebo funkce2 false pak

{
... //report chyb
return false; //konec funkce
}


Tohle neprovede druhou pormínku v případě, že by byla funkce1 vrátila false (údaje společnosti jsou zadány špatně, údaje uživatelů by se už nekontrolovaly).

if ( !( funkce1() && funkce2() ) ) //pokud není (funkce1 true a funkce2 true) pak

{
... //report chyb
return false; //konec funkce
}


Tohle by zase neprovedlo druhou podmínku v případě, že by první byla false, takže je to pořád to samé...

Nahlásit jako SPAM
IP: 88.102.27.–
KIIV+42
God of flame
2. 7. 2009   #11
-
0
-

tak si vsechny podminky nahazej do samostatnejch promennejch a vyhodnot az ty...

me se vzdy mnohem vice hodilo to zkracene vyhodnocovani..

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Míša
~ Anonymní uživatel
105 příspěvků
2. 7. 2009   #12
-
0
-

KIIV napsal:
tak si vsechny podminky nahazej do samostatnejch promennejch a vyhodnot az ty...

me se vzdy mnohem vice hodilo to zkracene vyhodnocovani..



Taky jsem to tak udělal, jen mě zajímalo jestli se to dá "jednoduššeji". :)

Nahlásit jako SPAM
IP: 88.102.27.–
KIIV+42
God of flame
2. 7. 2009   #13
-
0
-

formalne i ano:
$podm = ($neco==$neco);
$podm = (dalsi podminka) || $podm;
...

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Spectator0
Věrný člen
2. 7. 2009   #14
-
0
-

To Míša : Jak piše KIIV a DragonBehemont, jinak ty operatory ztraci smysl a i logiku.

Nahlásit jako SPAM
IP: 89.176.8.–
. . .
hrach
~ Redaktor
+1
Boss
2. 7. 2009   #15
-
0
-

nj, v delphi to jde zapnout specialnimi ridicime *komentari* - nevim jak to nazvat. php nic takeho nenabizi :(

Nahlásit jako SPAM
IP: 90.179.27.–
http://jan.skrasek.com@hrachcz – webdeveloper
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 34 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý