Не уверен, что значение

где:

$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));

Я не уверен, как выработать.

Итак, я понимаю, что это сокращенный оператор, и обычно это случай:

$value ? true : false

имея в виду

if $a = true { true } else { false };

так:

if $a{
if $a{
true;}
else{
0;};
else{
if $0{
$a;}
else{
true;}
};

это делает значение $ истинным?

2

Решение

Значение $a было бы true

$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));

Сокращение можно интерпретировать так:

if($a) {
if($a) {
$a = $b;
} else {
$a = $c;
}
} else {
if($c) {
$a = $a;
} else {
$a = $b;
}
}

Так как $a ложь, поскольку не существует в первую очередь, она сразу же переходит к выражению else в этом. Таким образом, единственная часть, которая имеет значение для вас:

  if($c) {
$a = $a;
} else {
$a = $b;
}

0 такой же как false, так $c вернется как ложный, поэтому $a равно $b, который true,

Редактировать:

Существует некоторое обсуждение брошенного уведомления, но оно не учитывает тот факт, что уведомления не являются действительно ошибками, и поэтому код не прерывается. Результат не Notice: Undefined variable: a«результат» (думаю, что эти люди имеют в виду результат) был бы пустым, если бы не мы определяли ценность $a в конце с var_dump, Вопрос заключался в том, какова ценность $a становится, а не то, что появляется на вашем экране.

То, что отображается на экране в виде переменной, которая не установлена, не имеет ничего общего со значением $a является.

Если вы выполните следующий код, уведомление не единственное реализованное:

$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));

var_dump($a);

Итак, вывод:

E_NOTICE : type 8 -- Undefined variable: a -- at line 5
bool(true)

Тот факт, что уведомление было брошено, не мешает $a стать правдой.

Также уведомления легко подавляются …

error_reporting(0);
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));

var_dump($a);

приведет к $a все еще становится правдой и не видя уведомления.

bool(true)
3

Другие решения

Если вы запустите код как есть, вы получите: Notice: Undefined variable: a in myfile.php on line 4

Поэтому я бы постулировал $a установлен где-то ранее. Тем не менее, независимо от того, какое значение $ a имеет ранее, если $ a может быть оценено как true или false, $ a все равно будет true после запуска вашего кода по следующей причине:

Если бы $ a были истинными, то первая часть привела бы к $ a = $ b, и мы знаем, что $ b = true.

if(TRUE) {
if(TRUE) {
$a = $b;  //AND $b == TRUE
} else {
$a = $c;
}
} else {
...
}

Если $ a ложно, то вторая часть снова выдаст $ a = $ b

if(FALSE) {
...
} else {
if(0) {    // 0 will equate to FALSE
...
} else {
// 0 is the same as FALSE so we end up again with $a = $b
$a = $b;  //AND $b == TRUE
}
}

Фактически, если вы запустите этот код, он покажет вам, что значение $ a истинно оба раза:

<?php
$a = false;
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));

echo $a;

$a = true;
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));

echo $a;
1

По вопросам рекламы [email protected]