/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Forskel mellem if "&&", "||" og "AND" ?
Fra : Jakob Munck


Dato : 14-06-06 06:53

Jeg skal bruge en kontrolkode, der gør at noget udskrives, hvis brugeren
BÅDE har postet et felt "Write" og hvis samtidig en session med navnet
"medlem_id" eksisterer. Jeg har testet 3 måder at skrive denne if-sætning,
og - tilsyneladende - virker de alle korrekt. Se her:

<?php
//hvad er forskellen mellem disse 3:

if ((isset($_POST["write"])) && (isset($_SESSION["medlem_id"]))){

if ((isset($_POST["write"])) || (isset($_SESSION["medlem_id"]))){

if ((isset($_POST["write"])) AND (isset($_SESSION["medlem_id"]))){

echo "Alt er i orden....!";
}

Men hvad er forskellen mellem om man bruger "&&", "||" eller "AND" til at
fortælle at begge de to betingelser skal være opfyldt for at udsagnet er
gyldigt? Jeg har set i manualen + Google, men ikke fundet et klart svar.

Nogen gode råd?

v.h.
Jakob




 
 
Bertel Lund Hansen (14-06-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 14-06-06 07:09

Jakob Munck skrev:

> Jeg skal bruge en kontrolkode, der gør at noget udskrives, hvis brugeren
> BÅDE har postet et felt "Write" og hvis samtidig en session med navnet
> "medlem_id" eksisterer. Jeg har testet 3 måder at skrive denne if-sætning,
> og - tilsyneladende - virker de alle korrekt.

Hrrm!

> //hvad er forskellen mellem disse 3:

> if ((isset($_POST["write"])) && (isset($_SESSION["medlem_id"]))){

> if ((isset($_POST["write"])) || (isset($_SESSION["medlem_id"]))){

> if ((isset($_POST["write"])) AND (isset($_SESSION["medlem_id"]))){
>
> echo "Alt er i orden....!";
> }

1 og 3 er identiske. 2 er modsat.

|| og OR er identiske.

> Nogen gode råd?

Vælg den notation du bedst kan lide.

&& og || er C(++)-notation.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Jakob Munck (14-06-2006)
Kommentar
Fra : Jakob Munck


Dato : 14-06-06 07:26

>> //hvad er forskellen mellem disse 3:
>
>> if ((isset($_POST["write"])) && (isset($_SESSION["medlem_id"]))){
>
>> if ((isset($_POST["write"])) || (isset($_SESSION["medlem_id"]))){
>
>> if ((isset($_POST["write"])) AND (isset($_SESSION["medlem_id"]))){
>>
>> echo "Alt er i orden....!";
>> }
>
> 1 og 3 er identiske. 2 er modsat.
>
> || og OR er identiske.
>

Tak for det.

Hvorfor så php har 2 notationer for den samme logik, det ved jeg ikke....?
Men bare det virker, og det gør det jo.

v.h.
Jakob



Peter Brodersen (14-06-2006)
Kommentar
Fra : Peter Brodersen


Dato : 14-06-06 07:42

On Wed, 14 Jun 2006 08:26:12 +0200, "Jakob Munck"
<jm2_fjern_dette@webspeed.dk> wrote:

>Hvorfor så php har 2 notationer for den samme logik, det ved jeg ikke....?

Det giver brugeren en valgmulighed mellem logiske operatorer, hvor
nogle binder stærkere end andre. Se mit indlæg til Bertel, og tjek
evt.:
http://php.net/manual/da/language.operators.php

Betragt udtrykket:
"Jeg vil købe is og tage til stranden eller i zoologisk have"

Det kan betyde to ting:
1. "Jeg vil (købe is og tage til stranden) eller i zoologisk have"
- mulighed 1: Købe is og tage til stranden
- mulighed 2: Tage i zoologisk have (irrelevant om man køber is)
2. "Jeg vil købe is og (tage til stranden eller i zoologisk have)"
- mulighed 1: Købe is og tage til stranden
- mulighed 2: Købe is og tage i zoologisk have

Her man man så ved at udvælge bestemte operatorer ud fra OR, AND, ||
og && bestemme, om det er den ene eller den anden betydning/logik, der
menes.

Jeg vil dog normalt ikke anbefale at man blander løs, men snarere at
man i stedet blot bruger parenteser til explicit at udtrykke, hvad man
mener. Og så i øvrigt holder sig til && og ||, hvis man ikke har en
god grund til andet.

--
- Peter Brodersen
Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk
Nu med link direkte til en adresse, fx: www.findvej.dk/Bredgade28,1260

Peter Brodersen (14-06-2006)
Kommentar
Fra : Peter Brodersen


Dato : 14-06-06 07:36

On Wed, 14 Jun 2006 08:09:23 +0200, Bertel Lund Hansen
<nospamfilius@lundhansen.dk> wrote:

>> Jeg skal bruge en kontrolkode, der gør at noget udskrives, hvis brugeren
>> BÅDE har postet et felt "Write" og hvis samtidig en session med navnet
>> "medlem_id" eksisterer. Jeg har testet 3 måder at skrive denne if-sætning,
>> og - tilsyneladende - virker de alle korrekt.
>Hrrm!

Det kan være, der kun testes når de alle er sat. Hvis der er tale om
en bestemt form, så vil de sandsynligvis være sat under alle
omstændigheder (hvilket så ikke betyder at de rent faktisk også
indeholder noget).

>> Nogen gode råd?
>
>Vælg den notation du bedst kan lide.
>
>&& og || er C(++)-notation.

Jeg vil anbefale kun at bruge && og || - man ser ikke AND eller OR så
meget i PHP-kode. Derudover kan det anbefales at man er konsekvent i
hvilket "sæt", man vælger - altså enten bruger "&& og ||" eller "AND
og OR".

(teknik-forklaring forude)
Ellers kan man få sig nogle overraskelser i forhold til
operator-precedence. I hver af de sæt vil "og" binde stærkere end
"eller", men blander man sættene, kan det modsatte være tilfældet.

var_dump(0 && 0 || 2); // true
var_dump(0 && 0 OR 2); // true
var_dump(0 AND 0 OR 2); // true
var_dump(0 AND 0 || 2); // false

I det sidste tilfælde kan vi se, at "||" har højere precedence end
"AND" - svarende til: (0 && (0 || 2))

--
- Peter Brodersen
Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk
Nu med link direkte til en adresse, fx: www.findvej.dk/Bredgade28,1260

Bertel Lund Hansen (14-06-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 14-06-06 08:17

Peter Brodersen skrev:

> (teknik-forklaring forude)
> Ellers kan man få sig nogle overraskelser i forhold til
> operator-precedence. I hver af de sæt vil "og" binde stærkere end
> "eller", men blander man sættene, kan det modsatte være tilfældet.

Tak skæbne, det var jeg ikke klar over. Men jeg blander ikke
udtrykkene.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste