Как сумма переменной PHP, только если она setada?


у Меня есть несколько сценариев, которые делают некоторые вычисления с данными, поступающими из формы, и для достижения суммы всех их создал другой файл, где я делаю sum:

include "varios.php";

$total = $var1 + $var2 + $var3; /// etc

тем не менее, я хочу, чтобы некоторые переменные, которые будут прочитаны, поэтому я попытался:

$total = isset($var1) + isset($var2) + isset($var3);

, Но, за то, что я понял, так он считает, 1, если он установлен, и 0 если это не так, независимо от того, значение пожаловать формы.

, Как было этот вопрос уже получил решить (но я не знаю, лучше), вот так:

if (!isset($var1)){
    $var1 = 0;
}

, То у меня больше нет проблем, но из этого, что я был в сомнении, почему первый способ не работает. Делает иначе, я думаю, что я считал это тип переменной boolean... Так ли это? Как это происходит, и почему?

 2
php
Author: gustavox, 2015-10-29

3 answers

PHP делает cast boolean практически время или expresão находится путем суммирования результатов isset(), которые могут быть 1 или 0.

<?php
   $var = 5;
   $var2 = 4;

   $total = isset($var) + isset($var2) + isset($var3);
   echo $total;

Выход 2, а не 9, как и ожидалось, php понимаете выражение как: 1+1+0

Пример ideone

 3
Author: rray, 2015-10-30 00:05:48

Вы Можете просто установить значение 0 таким образом, при указании значения пожаловать форм. Пример:

$var1 = isset($_POST['number1']) ? $_POST['number1'] : 0;
 3
Author: Pedro Sousa Santos, 2015-10-30 00:07:51

Существуют различные средства, чтобы устранить.

Посмотрите пример, используя переменные переменные array_sum()

$sum = array();
$v = 'var1'; $sum[] = (!isset($$v)? 0 : $$v);
$v = 'var2'; $sum[] = (!isset($$v)? 0 : $$v);
$v = 'var2'; $sum[] = (!isset($$v)? 0 : $$v);

$total = array_sum($sum);

echo $total;
 2
Author: Daniel Omine, 2015-10-30 04:07:34