2012-01-28 2 views
0

누군가 내게 다음 줄을 설명해 주시겠습니까?PHP 클래스가 포함 된 Ternary if 문

($myobjectfunction = object::function('letsgo')) ? eval($myobjectfunction) : false; 

나는 물건과 그 기능을 이해한다. 이 PHP는 $myobjectfunction이 정의되어 있다면 eval $myobjectfunction으로 정의되어 있습니까? 그렇지 않으면 아무 것도하지 않습니까? 내가 읽고있는 코드에서 object이이 줄 (때로는)보다 먼저 정의되지 않았기 때문입니다.

+0

"3 진 if 문"과 같은 것은 없습니다. 또한,이 구문은이 사이트에서 _all뿐만 아니라 모든 좋은 PHP 책에서 다루어집니다. 어떤 연구를하셨습니까? –

+0

또한'object'가 정의되어 있지 않으면이 코드는 해석하지 않고 실행합니다. –

+0

'object :: function ('letsgo')가 반환하는 것이 무엇인지 궁금합니다. 코드가 eval 된 경우 해를 끼치 지 않는다고 확신합니다.'eval()'이 존재하는 것이 좋지만 실제로는 사용하지 말아야합니다. – Arjan

답변

0

당신은 꽤 많은 것을 얻었습니다. IF $ myobjectfunction이 성공적으로 긍정적 인 결과 (예 : false, 0 또는 null이 아닙니다)를 반환했음을 나타냅니다. 새로운 변수 객체를 평가하지만, "false" else 비트에서, id는 null을 사용합니다. 이 아무것도 할 수 있도록

지금, "개체"

5

이 줄은 함수에서 반환 된 값을 할당 내 자신의 솔직한 의견에,이 비록 코드의 이상한 작품이다

을 정의 할 필요가 않습니다 object::function('letsgo')을 변수 $myobjectfunction으로 변경하십시오. 반환 값이 "truey"값 (부울 TRUE)으로 평가되면 해당 변수의 내용은 PHP 코드 (eval)로 평가됩니다. 초기 수익률이 FALSE이면 더 이상의 조치가 취해지지 않습니다. 결국 false은 아무 것도하지 않습니다.

PHP가 할당에서 값을 반환하기 때문에 이것은 일반적으로 사용되지는 않지만 작동합니다. 그러나 코드 비트의 경우 할당으로부터의 리턴은 괄호로 묶여 있기 때문에 3 진 연산자의 어느 분기를 가져올 지 결정하는 데 사용됩니다.

$x = 3; 
// returns 3 even if we don't use it... 

이것은 괄호가 초기 할당 주위에 있기 때문에 비정상적인 관용구입니다.

($myobjectfunction = object::function('letsgo')) ? eval($myobjectfunction) : false; 
//^^---------------------------------------------^^^ 

오른쪽의 조건에 기초하여, 왼쪽의 변수에 ?의 양쪽의 출력을 할당하는 것 인 터너 리 연산자의 전형적인 사용량은 = 같은

$myobjectfunction = object::function('letsgo') ? $someothervalue : false; 
+0

"return">. < –

+0

아니요,이 경우에는 $ myobjectfunction을 사용하기 때문에 더 이상하지 않을 것입니다. –

+0

@LightnessRacesinOrbit 실제로 ... 반영하기 위해 예제가 변경되었습니다. 설명을 위해 –

1

여기에 무슨 일이 일어나는지 정확하게 말하기는 어렵습니다. 나는 예제를 '단순화'하기 위해 실제 값을 대체했다고 가정하고 있지만 키워드를 사용하면 실제로 문제가 해결됩니다.

'object'클래스의 선언은 코드 실행 중에 어떤 시점에서 객체 클래스가 정의되어있는 한이 명령문 앞에있을 필요는 없습니다. 환언

$myobjectfunction = object::function('letsgo'); 

if($myobjectfunction) { 
    eval($myobjectfunction); 
} 
else { 
    false; 
} 

이 변수 object::function('letsgo') 결과를 할당 님

+0

(a) 질문에 답변하지 않았습니다. (b) 두 번째 단락이 잘못되었습니다. –

+0

나는 그것을 컴파일하고 결정된 방식으로 행동한다고 ​​말할 것이다. –

+0

다른 사람들이 어떤 버전의 PHP를 사용하고 있는지 알 수는 없지만, 내가 앉아있는 곳에서 OP가 제공 한 코드는 유효한 PHP가 아닙니다. –

1

이 코드는 동일하다. 해당 변수가 "truey"(false, null 또는 0이 아닌 값 또는 false와 같은 다른 값이 아닌 경우) 인 경우 eval의 내용입니다. 그렇지 않으면 아무 것도하지 않습니다.