Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нубовский вопрос про if и присваение данных переменной

714
11 февраля 2011 года
clgs
226 / / 29.10.2008
Здравствуйте.
Я вот тут что-то затупил. Как правильно
1.
 
Код:
if($val=function()){

или
2.
 
Код:
$val=function();
if($val){

или
3.
 
Код:
if(($val=function())){


как я понял, не проверял (пока не где, а руки чешутся), первое эквивалентно второму, а третье выполняется всегда, т.к. операция присваивания прошла успешно.
32K
11 февраля 2011 года
Clubberry
186 / / 19.01.2011
 
Код:
if (выражение)
    инструкция

Если я правильно понял о_О
278
11 февраля 2011 года
Alexander92
1.1K / / 04.08.2008
clgs, все три способа эквивалентны. От того, что вы поставите лишние скобки, ничего не изменится.
244
11 февраля 2011 года
UAS
2.0K / / 19.07.2006
Если $val планируется юзать далее, то лучше уж второй вариант, так как он более очевидный.
Цитата:
т.к. операция присваивания прошла успешно.


А че, есть возможность, что присвоения не произойдет? Или в чем смысл такой проверки?

714
11 февраля 2011 года
clgs
226 / / 29.10.2008
Цитата: UAS
Если $val планируется юзать далее, то лучше уж второй вариант, так как он более очевидный.


Так обычно и делаю. Но вот задумался... :)

Цитата: UAS

А че, есть возможность, что присвоения не произойдет? Или в чем смысл такой проверки?


Ну я в общем, в тому-же написал "а третье выполняется всегда". А вот в С++ может быть ошибка)
Интересна логика)

285
11 февраля 2011 года
Romik
479 / / 24.11.2002
Варианты кроме второго таят в себе потенциальные ошибки, их лучше избегать.
В первом случае сложно будет выявить есть ли ошибка или нет, когда вместо сравнения вдруг появиться присвоение (забыли лишний знак =)
Третий случай эквивалентен первому.
369
12 февраля 2011 года
Kesano
451 / / 09.10.2007
Давайте извращаться:
$val=function();
if($val==function() || !empty($val) || isset($val) || function()==$val) {
}
369
12 февраля 2011 года
Kesano
451 / / 09.10.2007
Кстати, ищу доказательство
($a==$b) != ($b==$a)
5
12 февраля 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Kesano
Кстати, ищу доказательство
($a==$b) != ($b==$a)


Это называется некоммутативность. В общем случае зависит от типов данных $a и $b.

369
12 февраля 2011 года
Kesano
451 / / 09.10.2007
Цитата: hardcase
Это называется некоммутативность. В общем случае зависит от типов данных $a и $b.



Поколупался...
Пока получилось только, что ($a==$b) != ($a===$b);

Делал так:

 
Код:
$a = (int)11;
var_dump($a);
$b = "11";
var_dump($b);

if($a==$b) { echo "Good";  }
if($a===$b) { echo "Good";  }
7
12 февраля 2011 года
@pixo $oft
3.4K / / 20.09.2006
Конечно же!НЯП,«==» сравнивает по значению(приведённому по возможности к одному типу),а «===»–ещё и по типу
369
12 февраля 2011 года
Kesano
451 / / 09.10.2007
Цитата: @pixo $oft
Конечно же!НЯП,«==» сравнивает по значению(приведённому по возможности к одному типу),а «===»–ещё и по типу



Это как бы и кролику поятно...
Я о том, как вызвать исключение в тождествах, путем перемены мест тождеств, чтобы:
$a==$b - true
$b==$a - false

или
$a===$b - true
$b===$b - false

Или же приведенное условие недопустимо???

Заданный вопрос не имеет практического смысла... скорее головоломка..

244
13 февраля 2011 года
UAS
2.0K / / 19.07.2006
Ну, операция == в пхп коммутативна, в результате чего - похожего вам добиться точно не получится)
714
14 февраля 2011 года
clgs
226 / / 29.10.2008
Цитата: Romik
Варианты кроме второго таят в себе потенциальные ошибки, их лучше избегать.
В первом случае сложно будет выявить есть ли ошибка или нет, когда вместо сравнения вдруг появиться присвоение (забыли лишний знак =)
Третий случай эквивалентен первому.



Тот код который я написал правильный, и там стоит ПРИСВОИТЬ.

278
14 февраля 2011 года
Alexander92
1.1K / / 04.08.2008
Kesano, боюсь, что вы принципиально свою задумку не реализуете. Операция проверки на равенство коммутативна по определению. Чтобы это изменить, нужно крепко поизвратиться и перегрузить operator== довольно нестандартным способом, что, как мне помнится, в PHP сделать невозможно.
714
15 февраля 2011 года
clgs
226 / / 29.10.2008
Если рассматривать по ходы исполнения следующего куска кода
 
Код:
if($val=function()){

получается так:
1.
 
Код:
$q= function()


2.
 
Код:
$w= $val=$q


3.
 
Код:
if($w){


Alexander92, да вы правы)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог