2011-05-13 5 views
2

다음 코드는 오류를주지 않습니다. 그러나 나는 두 번째 부분에 푹 빠져있다.PHP 및 질문

.......... 
// Get meta data for the module 
$this->template->module_details = $this->module_details =  
$this->module_m->get($this->module); 

// If the module is disabled, then show a 404. 
empty($this->module_details['enabled']) AND show_404(); 
.......... 

나를 위해 두 번째 부분은 이와 같아야합니다.

if(empty($this->module_details['enabled']){ 
show_404(); 
} 

Q1. 똑같은가요? AND는 어떻게 된거 야?

2. 첫 번째 부분 에서처럼 = 두 번 넣을 수 있습니까? 왜 그것을해야합니까? (A = B = C)

미리 감사드립니다.

답변

3

1 : 모든 부울 연산자는 "게으른"역할을합니다. 식이 definitly true 또는 false로 확인되는 경우에는 부울 표현식이 이미 알려져 있기 때문에 그 방법은, 그 다음 (하위) 식 doSomething() 실행되지 두 경우

true or doSomething(); 
false and doeSomething(); 

평가되지 true/false. 여기

true and doSomething(); 
false or doSomething(); 

doSomething() 라운드 다른 방법은 항상 실행까지 (전체) 식의 결과는 알 수 없기 때문에, 실행됩니다.

그래서 당신은 empty()을 가진 부분은 당신이 준 -statement if에 어떤 결과, true로 평가되면 show_404()이 실행되어, 맞다.

질문 2 : PHP에서 모든 연산자는 반환 값을가집니다. = (할당)의 경우 반환 값은 단순히 할당 된 값입니다.

$a = $b = 1; 
// => 
$a = ($b = 1); // where ($b = 1) === 1 

아무도 정말 이 필요하지 않습니다,하지만 때로는이 시점에서의 유용한 때문에 더 분명, $a$b가 가지고있는 같은 값.

2

질문 하나

andlogical short circuit로 사용됩니다.

표현식의 두 번째 부분을 실행하려면 첫 번째 부분을 true로 설정해야합니다. 이것은 본질적으로 RHS가 실행되기위한 LHS의 조건을 형성합니다 - 때때로 읽을 수없는 구문 론적 지름길 인 경우 유용합니다.

LHS가 거짓이면 통역사는 (false && (true || false) === false) 이후 전체 문장이 false으로 평가되므로 RHS 확인을 거칠 필요가 없다는 것을 알고 있습니다.

질문 두

는 할당은 항상 RHS의 값을 반환합니다.

당신은 쉽게 그것을 무너 뜨리는 수 :

$this->module_details = $this->module_m->get($this->module); 
$this->template->module_details = $this->module_details; 

.. 또는 괄호를 추가하는 것은 조금 더 분명하게 : 예를 들어

$this->template->module_details = 
    ($this->module_details = $this->module_m->get($this->module)); 

, 할당의 RHS는 평가 일반적으로 루프 동안 사용 예를 들면 :

while ($row = mysql_fetch_assoc($query)) {} 

mysql_fetch_assoc 다시 때문에 작동 false이 결과에 나타나지 않으므로 ($row = false)false으로 평가되고 while 루프를 중지합니다.

2

너무 혼동해서는 안되며, 대체물을 보았을 뿐이며 연결되지 않았습니다.

쿼리를 수행 또는 사망,이 의미

mysql_query($sql) OR die(" :("); //false or die('died'); 

기억!

empty($this->module_details['enabled']) AND show_404(); 

여기는 반대입니다.

If it's empty, show 404; //true and die('died'); 

당신은 단지 다른 조건처럼 || 대신 OR의를 사용할 수 있습니다, 그것은 연산자 우선 순위가 다른 단지입니다.

첫 번째 질문은.

이는 단지 a, bc에 대해 동일한 값을 설정한다는 것을 의미합니다.

$a = $b = $c = 0; //setting all to 0; 
+0

는'='의 할당은 아닌 비교'=='/'===' – KingCrunch

+0

@KingCrunch 나는 알고있다. 예제에서 명확하게 보여 지듯이 모든 변수에 동일한 값을 할당합니다. 나는 아무도 다른 사람이 잘못 추측 할 수 있도록 진술을 수정했다. – JohnP