Если (это = это) - что на самом деле здесь происходит? - PullRequest
2 голосов
/ 28 апреля 2011

Трудно задать поиск по этому вопросу, и ответ поможет немного очистить мой код. В основном, в PHP, если я использую:

if (this = that)

что происходит? Проверяет ли она, что переменная была назначена правильно, или она проверяет истинность «того» и, кроме того, присваивает ей «это»?

Я спрашиваю, потому что было бы легче, если бы ответ был первым, потому что он взял дополнительную строку, чтобы назначить его, затем запустить условное выражение, а затем использовать его возвращение позже. Я знаю, что скучать по одной строке очень сложно, но по всему сценарию это может сложиться. Спасибо за любую помощь.

УТОЧНИТЬ: Я хочу написать по существу эквивалент следующего:

$this = something;
if ($this)
  do things with $this

записав это как

if ($this = $myFunctionCall)
  do things with $this;

при условии, что $ это не установлено заранее.

Ответы [ 10 ]

7 голосов
/ 28 апреля 2011

Это присваивание, а затем проверка «правильности» присвоенного значения.

2 голосов
/ 28 апреля 2011

Linus

Независимо от того, работает ли это, я не фанат подхода «задание в тесте». Я думаю, что слишком легко упустить из виду НАЗНАЧЕНИЕ, которое является потенциальным (и его легко избежать) источником будущих ошибок ... Я думаю, что эта обычно используемая парадигма кодирования "немного небрежно".

Почти во всех "современных" языках вы можете создать и назначить локальную переменную за один шаг ... который я нахожу кратким, самоочевидным и в высшей степени удобочитаемым.

var stuff = getStuff();
if (stuff == null) {
  Message("Sorry, no stuff found.");
  return;
}

стихи

var thing, widget, stuff, foo;

.... then many lines later ...
if ((stuff=getStuff())) {
  // do things with stuff
} else {
  // no stuff
  Message("Sorry, no stuff found.");
}

Как вы можете сказать, я также не являюсь поклонником старой поговорки о "структурированном программировании" о том, что для каждой функции / метода / сценария должна быть одна точка выхода. Вместо этого я считаю, что всякий раз, когда мы сталкиваемся с ситуацией, которая означает, что мы не можем продолжать здесь, мы должны уйти самым прямым возможным путем. Это просто личное предпочтение. Вы можете сделать обоснованные аргументы для любого подхода.

Одно слово: что бы вы ни делали, делайте это ПОСТОЯННО! Программист, который (через несколько лет, когда вы двинулся дальше) отвечает за улучшение кода, поймает достаточно быстро, чтобы "ваш стиль". Им может не нравиться это, но это действительно не важно, пока они ПОНИМАЮТ это. Всегда есть компромисс между краткостью и ясностью ... нет "правильного" стиля ... просто некоторые стили, кажется, работают лучше, чем другие, в долгосрочной перспективе.

ПОЦЕЛУЙ, сын мой, и краткость.

Приветствия. Кит.

2 голосов
/ 28 апреля 2011

проверка "правдивости" this iirc, назначение происходит до оценки

1 голос
/ 28 апреля 2011

Операция присваивания ($foo = 'bar') - это выражение , в котором значение присваивается переменной. выражение в целом возвращает значение.Возвращаемое значение - это значение, которое было присвоено.

Итак, if ($foo = 'bar') является синонимом:

$foo = 'bar';
if ('bar') ...
1 голос
/ 28 апреля 2011

Я хочу сказать, что он присваивает, а также проверяет значение, основываясь исключительно на этом коде

while($row = mysql_fetch_assoc($query))
{
    // Query actions
}

, который мы все знаем циклически, пока больше нет результатов для обработки.mysql_fetch_assoc возвращает false, когда не осталось результатов, но значение все еще присвоено, следовательно, он не проверяет, было ли назначено значение, а значение , которое было назначено.

1 голос
/ 28 апреля 2011

Да, сначала он назначает, а затем проверяет, верно ли это.

Как при обходе таблиц MySQL:

while ($row = mysql_get_row($query)) {
  ...
}

Когда он больше не работает (всплывает false), цикл обрывается.Он назначает и проверяет действительность, все в одной строке.

1 голос
/ 28 апреля 2011

Вы бы присвоили значение that для this и проверили бы, если this, тогда оценивается как true.

1 голос
/ 28 апреля 2011

Сначала будет установлено $ this в $ that, а затем, если $ this == true, будет выполнено содержимое оператора if.

0 голосов
/ 28 апреля 2011

если (это = это)

step 1->
это = это;// скопировать данные из этого в этот

step 2->
Если копирование выполнено успешно, код стал таким:

if (1) // true

If copyне удалось, тогда код стал таким

if (0) // false

0 голосов
/ 28 апреля 2011

Демонстрационный код

$false = false;
$true = true;
$someVar = true;

function someFunk() {
  return false;
}

if ($someVar = $false) {
  echo "True \n";
} else {
  echo "False \n";
}

if ($someVar = $true) {
  echo "True \n";
} else {
  echo "False \n";
}


if ($someVar = someFunk()) {
  echo "True \n";
} else {
  echo "False \n";
}

Это выводит

False 
True 
False

http://codepad.org/8JxX8MYP

...