Il linguaggio di programmazione PHP
 

var_dump(true & true) visualizza int(1)

alex 18 Gen 2017 15:38
Osservate questo esempio
<?php
$a=true;
$b=true;
$c=true;
$d=true;

var_dump($a & $b & $c & $d);

$a=true;
$b=true;
$c=false;
$d=true;

var_dump($a & $b & $c & $d);
?>

Visualizza:

int(1)
int(0)

Io invece vorrei che il risultato fosse bool(true) se tutti i valori
sono true; invece bool(false) se anche un solo valore è false.
Si può?
g4b0 18 Gen 2017 15:58
On 18/01/2017 15:38, alex wrote:
>
> Io invece vorrei che il risultato fosse bool(true) se tutti i valori
> sono true; invece bool(false) se anche un solo valore è false.
> Si può?

Stai usando il bitwise operator AND (&):

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

Per ottenere quello che vuoi devi usare il logical operator AND (&&):

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

--
g4b0, linux user n. 369000
http://brosulo.net
fmassei@gmail.com 18 Gen 2017 15:59
On Wednesday, January 18, 2017 at 9:38:04 AM UTC-5, alex wrote:
> Osservate questo esempio
> <?php
> $a=true;
> $b=true;
> $c=true;
> $d=true;
>
> var_dump($a & $b & $c & $d);
>
> $a=true;
> $b=true;
> $c=false;
> $d=true;
>
> var_dump($a & $b & $c & $d);
> ?>
>
> Visualizza:
>
> int(1)
> int(0)
>
> Io invece vorrei che il risultato fosse bool(true) se tutti i valori
> sono true; invece bool(false) se anche un solo valore è false.
> Si può?

& = and bitwise, opera su interi senza segno
&& = and logico, opera su booleani
Se gli argomenti degli operatori non hanno il tipo giusto c'è un cast
automatico.
O fai ($a && $b) (operi su booleani) o ((bool)($a & $b)) (e fai tre cast di
cui uno esplicito).

Ciao!
alex 18 Gen 2017 18:25
Il 18/01/2017 15:58, g4b0 ha scritto:
> Stai usando il bitwise operator AND (&):
>
> http://php.net/manual/en/language.operators.bitwise.php
>
> Per ottenere quello che vuoi devi usare il logical operator AND (&&):
>
> http://php.net/manual/en/language.operators.logical.php

function a(){
echo "a\n";
return false;
}

function b(){
echo "b\n";
return false;
}

$_ = a() && b();//viene richiamata solo a()...

...per fare richiamare anche b() ?
alex 18 Gen 2017 18:27
Il 18/01/2017 15:59, fmassei@gmail.com ha scritto:
> & = and bitwise, opera su interi senza segno
> && = and logico, opera su booleani
> Se gli argomenti degli operatori non hanno il tipo giusto c'è un cast
> automatico.
> O fai ($a && $b) (operi su booleani) o ((bool)($a & $b)) (e fai tre cast di
> cui uno esplicito).

Questa è la soluzione che ho adottato. Se non c'è di meglio...
fmassei@gmail.com 18 Gen 2017 19:03
On Wednesday, January 18, 2017 at 12:26:00 PM UTC-5, alex wrote:
> Il 18/01/2017 15:58, g4b0 ha scritto:
>> Stai usando il bitwise operator AND (&):
>>
>> http://php.net/manual/en/language.operators.bitwise.php
>>
>> Per ottenere quello che vuoi devi usare il logical operator AND (&&):
>>
>> http://php.net/manual/en/language.operators.logical.php
>
> function a(){
> echo "a\n";
> return false;
> }
>
> function b(){
> echo "b\n";
> return false;
> }
>
> $_ = a() && b();//viene richiamata solo a()...
>
> ...per fare richiamare anche b() ?
>

Le espressioni con operatori logici possono essere cortocircuitate...

Comunque questa è proprio la base dela base, eh...

Ciao!
g4b0 19 Gen 2017 08:47
On 18/01/2017 18:25, alex wrote:
> Il 18/01/2017 15:58, g4b0 ha scritto:
>> Stai usando il bitwise operator AND (&):
>>
>> http://php.net/manual/en/language.operators.bitwise.php
>>
>> Per ottenere quello che vuoi devi usare il logical operator AND (&&):
>>
>> http://php.net/manual/en/language.operators.logical.php
>
> function a(){
> echo "a\n";
> return false;
> }
>
> function b(){
> echo "b\n";
> return false;
> }
>
> $_ = a() && b();//viene richiamata solo a()...
>
> ...per fare richiamare anche b() ?

Questa é un'ottimizzazione di PHP che ha i suoi fondamenti nell'algebra
booleana. Affinché l'and booleano sia true tutti i valori testati devono
essere true, per cui PHP al primo false che trova termina il test.

Questo ti permette tra l'altro di fare dei check di questo tipo:

if (isset($obj) && $obj->test())

che altrimenti andrebbero in fatal error nel caso in cui $obj non fosse
inizializzato.

--
g4b0, linux user n. 369000
http://brosulo.net
alex 19 Gen 2017 11:06
Il 19/01/2017 08:47, g4b0 ha scritto:
> Questo ti permette tra l'altro di fare dei check di questo tipo:
>
> if (isset($obj) && $obj->test())
>
> che altrimenti andrebbero in fatal error nel caso in cui $obj non fosse
> inizializzato.


certamente!!!

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione PHP | Tutti i gruppi | it.comp.www.php | Notizie e discussioni php | Php Mobile | Servizio di consultazione news.