Что на самом деле возвращает $ var = value? - PullRequest
0 голосов
/ 03 июля 2011

Мне кажется, что это очень загадочная часть PHP, и мне было интересно, если кто-то мог бы прояснить, потому что руководство не содержит этого (или я просто не мог найти его где-нибудь).

Что бы некоторые из этих вещей вернули?

if($c = mysql_connect($host, $user, $pass)){
 echo 'Success';
}else{
 echo 'Failure';
}

Будет ли это всегда отражать "Успех", потому что $ c успешно присвоено значение true или false?Мне интересно, могу ли я сделать это или мне нужно определить $ c в предыдущей строке.

Спасибо.

Ответы [ 4 ]

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

Упоминается в Операторы присваивания :

Значением выражения присваивания является присвоенное значение. То есть значение «$ a = 3» равно 3.

Таким образом, $c = ... приведет к true, если true присвоено $c, и к false, если false назначено.

Это также причина, по которой итерация результатов запроса

while(($row = mysql_fetch_array(...)))

работает.

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

Если сомневаетесь, создайте контрольный пример!

Построить тест-кейс:

if ( $c = true ) {
  echo 'Success';
} else {
  echo 'No Success';
}

Запустите это онлайн: http://codepad.org/jxylNzOu

Вы заметите, что первый блок будет выполнен, только если условия повысятся true (или то, что PHP оценивает как true при запросе), поэтому он не спрашивает, было ли значение успешно применено к $c , а точнее, является ли значение, примененное к $c, равным true.

Относительно вашего конкретного примера ...

Если в вашем случае, когда вы пытаетесь открыть соединение с MySQL, $c будет true, если соединение установлено, в результате будет запущен первый блок if-statement. В противном случае, если соединение не установлено, $c будет иметь значение false, что делает условие if-statement false, что приведет к выполнению блока else.

Согласно документации для mysql_connect(), одна из двух вещей может быть возвращена из этой функции.

  1. Идентификатор ссылки MySQL (если установлено соединение)
  2. FALSE, указывая на невозможность установить соединение.

Так что нет разницы между следующими примерами кода

$conn = mysql_connect( $host, $user, $pass );
if ( $conn ) { /*...*/ }

И

if ( $conn = mysql_connect( $host, $user, $pass ) {
  /*...*/
}
0 голосов
/ 03 июля 2011

PHP является "слабо типизированным" языком, что означает, что php не требует (и не поддерживает его) явного объявления типа переменных.

Обратите внимание на потребление или оцените 0 1 как true / false(логическое значение)

Взять этот случай в качестве образца:

$s = "0"; //String s = '0'
$res = strstr($s,'0'); //Search the character zero into the string $s
if ($res){
  echo "Zero found!";
}else{
  echo "Zero not found!"
}
//Hey!! Whats up!!?? Zero is not found!

Это потому, что ноль, который является возвращенным значением функции strstr, оценивается как FALSE, производящий вв некоторых случаях неожиданные результаты.

Правильный способ - использовать оператор Not Identical !==, где сравнивается значение и тип

Предыдущий пример должен быть:

$s = "0"; //String s = '0'
$res = strstr($s,'0'); //Search the character zero into the string $s
if ($res !== FALSE){//Check for value AND type
  echo "Zero found!";
}else{
  echo "Zero not found!"
}
//yeah now it works!

Итак, в вашем случае я бы написал оператор if как:

if(($c = mysql_connect($host, $user, $pass)) !== FALSE){
 echo 'Success';
}else{
 echo 'Failure';
}
0 голосов
/ 03 июля 2011

Это не всегда повторяет «Успех».PHP сначала присваивает результат mysql_connect $to, а затем оценивает логическое значение $to.Но лучше использовать этот способ, чтобы обеспечить понятность:

$c = mysql_connect($host, $user, $pass)
if($to) {
    echo 'Success';
} else{
    echo 'Failure';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...