PHP의 or
은 이상한 키워드입니다. 여기 나를 혼란스럽게 만드는 코드 스 니펫이 있습니다 :PHP에서 "or"의 이상한 방법
echo 0 or 1; // prints 1
$foo = (0 or 1);
echo $foo; // prints 1
$foo = 0 or 1;
echo $foo; // prints 0 for some reason
왜 마지막 하나는 0이 아닌 1을 인쇄합니까?
PHP의 or
은 이상한 키워드입니다. 여기 나를 혼란스럽게 만드는 코드 스 니펫이 있습니다 :PHP에서 "or"의 이상한 방법
echo 0 or 1; // prints 1
$foo = (0 or 1);
echo $foo; // prints 1
$foo = 0 or 1;
echo $foo; // prints 0 for some reason
왜 마지막 하나는 0이 아닌 1을 인쇄합니까?
연산자 우선 순위가이기 때문입니다. 세 번째 경우에는 할당이 먼저 처리됩니다. 그것은 다음과 같이 해석됩니다 :
($foo = 0) or 1;
||
연산자는 다른 우선 순위를 가지고있다. 사용하는 경우
$foo = 0 ||1;
예상대로 작동합니다.
그것은($foo = 0) or 1;
년대
manual on logical operators
'$ foo = (0 or 1);' – Treffynnon
@Trefynnon : 아니요, 또는'='보다 우선 순위가 낮습니다. 만약 당신이'||'를 사용한다면 당신은 맞을 것입니다. – nico
@ Treffynnon : 그러나 그것은 다른 진술 일 것입니다. – You
참조하십시오. or
은 =
보다 낮은 operator precedence을 갖는다.
이 경우 ||
을 사용해야합니다. 우선 순위가 =
보다 높으므로 예상대로 평가됩니다.
아니, 난,하지 않을 것이라고 때문에 operator precedence의의 :
$foo = 0 or 1;
// is same as
($foo = 0) or 1;
// because or has lower precedence than =
$foo = 0 || 1;
// is same as
$foo = (0 || 1);
// because || has higher precedence than =
// where is this useful? here:
$result = mysql_query() or die(mysql_error());
// displays error on failed mysql_query.
// I don't like it, but it's okay for debugging whilst development.
IIRC, 할당 연산자 (=
는) or
보다 더 높은 우선 순위를 가지고 있습니다. $foo
에 0을 할당하는 문장이지만, 주먹 문으로 해석됩니다 1. 반환
($foo = 0) or 1;
: 인쇄됩니다 같은
echo(0 or 1);
따라서, 마지막 줄 것으로 해석된다 1.
순서. 단어 "or"는 해당 "||"보다 우선 순위가 훨씬 낮습니다. 할당 연산자보다 낮거나 같습니다. 따라서 할당이 먼저 발생하고 할당 값이 "or"의 첫 번째 피연산자입니다.
"또는"은 논리 연산보다 흐름 제어에 더 많이 사용됩니다. get_something이 false를 반환하도록 코딩되었거나 실패한 경우 0을 나타내는 경우
$x = get_something() or die("Couldn't do it!");
과 같이 말할 수 있습니다.
처음 두 조각에서 0 또는 1 (본질적으로 참 또는 거짓)을 비교합니다. 세 번째 스 니펫에서는 작동하는 0을 할당하므로 true 또는 false가되므로 조건 또는 조건이 실행되지 않습니다. emphasized text
세 번째 예에서 = 연산자는 or보다 우선 순위가 높으므로 먼저 수행됩니다. || 연산자는 표면적으로는 =보다 우선 순위가 높습니다. 당신이 말했듯이, 흥미 롭습니다.
사람들은 실제로 두 개의 파이프 대신 "또는"이라는 단어를 쓰나요? – Incognito
예.희귀 기호 (예 : "||")의 조합보다 단어 (예 : "또는")는 사람들에게 더 이해하기 쉽습니다. –