Как лучше всего выдержать сравнение с 0 в PHP?

Что-то вроде

actuallink = 'http://www.exxonmobilperspectives.com'
endPoint = len(actuallink.split('/')) - 1
if endPoint > 0:
    slashcounter = 0
    indexslash = 0
    while slashcounter < endPoint:
        if(actuallink[indexslash] == '/'):
            slashcounter = slashcounter + 1
        indexslash = indexslash + 1
        PLink = actuallink[:indexslash]
13
задан nickf 18 May 2009 в 00:44
поделиться

5 ответов

Краткая версия:

if ("$myVal" === '0')

или

if (strval($myVal) === '0')

Длинная версия:

if ($myVal === 0 || $myVal === '0')
20
ответ дан 1 December 2019 в 21:53
поделиться

Если значения, которые вы получаете из базы данных, являются строками, но исходный тип данных является целым числом, то вы, вероятно, хотите, чтобы ваш DAO (объект доступа к данным или что-то еще, что извлекает данные), приведите вещи к типам данных, которые вы ожидаете. Таким образом, PHP-код, который просматривает значения, смотрит на тип данных, который он ожидает.

Проблема, конечно же, в том, что нет соответствия 1-1 между типами данных, которые определяет БД, и типы данных, определенные PHP. Однако по большей части это не проблема, поскольку для большинства типов, которые мы обычно используем, существуют эквивалентные типы: int, float, bool, string.

В результате получается, что между местом, где вы запрашиваете базу данных , и место, где вы проверяете эти значения, эти значения должны быть приведены к ожидаемым типам данных. Я только что протестировал mysql_fetch_object () в таблице MySQL, содержащей int (10) и varchar (50); оба поля всегда подтягивались PHP как "строка". Поэтому, если вы хотите, чтобы одно из полей обрабатывалось как int, преобразуйте его в int, прежде чем что-либо делать с ним. Например:

$rs = mysql_query("SELECT * FROM table");
while ($row = mysql_fetch_object($rs)) {
    $RealRow->id = (int)$row->id;
    $RealRow->name = $row->name;
    // etc.
}

// ... later ...

if ($RealRow->status == 0) {
    // do something
}

Запрос и материал RealRow должны находиться внутри класса / метода, чтобы он был инкапсулирован; таким образом, ЛЮБАЯ часть вашего кода, которая получает данные из таблицы , всегда будет вместо этого получать объект $ RealRow, в котором все будет установлено на правильные типы данных. Конечно, если вы измените свои типы данных, это потребует ручного редактирования DAO, чтобы иметь дело с приведением; также можно было бы запросить БД, чтобы получить тип каждого поля (с помощью «SHOW COLUMNS FROM table»), и автоматически приведёт поля к правильному типу данных.

1
ответ дан 1 December 2019 в 21:53
поделиться

Я думаю, вам следует просто использовать

if ($myVal == 0)

. Я не думаю, что нужно беспокоиться о том, является ли $ myVal "foo". Вы сами сказали, что это значение всегда будет только числом.

Другими словами, если вы когда-нибудь столкнетесь с тем, что $ myVal является "foo", ошибка не в том, что "foo" == 0, ошибка в что $ myVal - это "foo", хотя это должно быть число.

1
ответ дан 1 December 2019 в 21:53
поделиться

Лучшее, что у меня есть на данный момент, это:

is_numeric($myVal) && $myVal == 0
2
ответ дан 1 December 2019 в 21:53
поделиться

Попробуйте использовать intval () для преобразования строки в int

if( intval($myVal) == 0 )
0
ответ дан 1 December 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: