Php Booleans не работает правильно? - PullRequest
0 голосов
/ 03 июля 2011

У меня есть следующий код, у меня, похоже, возникают проблемы с логическими значениями в php, когда я выкидываю значение bCreatedEvent, оно просто пустое, что я делаю неправильно, и я неправильно использую логические значения?Это также не проходит мою проверку логики, поэтому я могу перенаправить внизу.Я довольно новичок в php, но думал, что большая часть этого должна работать аналогично c / c ++.

$dbTheatreCMS = new TheatreCMSDB();
                $iEventID = $dbTheatreCMS->InsertNewEvent($sTitle, $sCompany, $iCreateID, $sNotes, $sPrePrice, $sRegPrice);

                $bEventCreated = False;
                echo "bEventCreated1 = " . $bEventCreated . "<br/>";
                $bEventInfoInserted = True;
                $bEventRolesInserted = True;

                if ($iEventID > 0)
                {
                    $bEventCreated = true;
                    if (isset($_POST["Venues"], $_POST["EventDates"]))
                    {
                        $aiVenueIDs = $_POST["Venues"];
                        $adtEvents = $_POST["EventDates"];
                        if (count($adtEvents) == count($aiVenueIDs)) // These should be the same length
                        {
                            for ($i = 0; $i < count($adtEvents); $i++)
                            {
                                $bEventInfoInserted &= ($dbTheatreCMS->InsertNewEventInfo($iEventID, $aiVenueIDs[$i],$adtEvents[$i]) > 0) ? true :false;
                            }
                        }
                    }

                    if (isset($_POST["Troupers"], $_POST["Roles"]))
                    {
                        $trouperIDs = $_POST["Troupers"];
                        $roles = $_POST["Roles"];
                        if (count($trouperIDs) == count($roles))
                        {
                            for ($i = 0; $i < count($trouperIDs); $i++)
                            {
                                $bEventInfoInserted &=  ($dbTheatreCMS->InsertNewTroupeInfo($iEventID, $trouperIDs[$i],$roles[$i]) > 0)? true:false;
                            }
                        }
                    }
                }

                echo "bEventCreated = " . $bEventCreated . "<br/>";
                echo "bEventInfoInserted = " . $bEventInfoInserted . "<br/>";
                echo "bEventRolesInserted = " . $bEventRolesInserted . "<br/>";

                $bEventCreated = $bEventCreated & $bEventInfoInserted & $bEventRolesInserted;
                echo "$bEventCreated = " . $bEventCreated . "<br/>";

                if($bEventCreated == True)
                {
                    echo "<script type='text/javascript'>window.localStorage.href = 'some page.php';</script>";
                }

output

bEventCreated1 = 
bEventCreated = 
bEventInfoInserted = 1
bEventRolesInserted = 1
0 = 0

Ответы [ 5 ]

1 голос
/ 03 июля 2011

эхо false будет выглядеть пустым при использовании var_dump($bEventCreated)

Также & - побитовый оператор. Я думаю, вы имеете в виду &&

$bEventCreated = $bEventCreated & $bEventInfoInserted & $bEventRolesInserted;
0 голосов
/ 03 июля 2011

Когда вы выводите переменную, она сначала преобразуется в строку.

Когда FALSE или NULL преобразуются в строку, они преобразуются в пустую строку, "". TRUE преобразуется в «1». Массивы конвертируются в «Массив». Ресурсы не определены, хотя в настоящее время они конвертируются как «Ресурс #N». Объекты выдадут ошибку, если они не реализуют __toString ().

0 голосов
/ 03 июля 2011

В PHP есть некоторые причуды с логическими значениями. Эти две ссылки могут помочь:
http://pl.php.net/manual/en/language.types.boolean.php
http://pl.php.net/manual/en/language.types.string.php#language.types.string.casting

0 голосов
/ 03 июля 2011

Убедитесь, что вы всегда используете идентичные или не идентичные операторы сравнения при выполнении логического условия:

if($bEventCreated === TRUE)

0 голосов
/ 03 июля 2011

Если значение равно false, оно не будет echo или print значением.См. Например:

<?php

$true = true;
$false = false;

echo $true."\n";
echo $false."\n";

var_dump($true)."\n";
var_dump($false);

?>

http://codepad.org/98bR4bfn

...