2012-06-26 2 views

답변

4

그럼 다른 하나는 변수를 사용하고 다른 하나는 그렇지 않습니다. 이 경우 치명적인 오류가 발생합니다.

class test { 

    public function __construct(&$a) 
    { 

    } 
} 

$a = true; 

new test($a); 

new test(true); //Fatal error because this cannot be passed by reference 
1

엄밀히 말하면 테스트가 정의되는 방식에 따라 다릅니다. true 리터럴 값이므로

test 경우, 이러한 입력 파라미터를 passed by reference 것을 다음 2 치명적인 오류를 발생 것이 정의된다.

또한 test에는 줄의 실행 순서가 중요하다는 의미의 부작용이있을 수 있습니다. 12이 중요합니다.

1

test 클래스의 생성자에 따라 다릅니다. 일반 패스 별 값 생성자에서 그들은 정확히 동일 예상대로

다음
class test { 
    public $b; 
    function __construct($a) { $this->b = $a; } 
} 

, $obj->b은 모두 당신의 문에 대한 true 될 것입니다.

passing by reference 인 경우 나중에 글로벌 $a을 변경하면 다른 결과가 발생할 수 있습니다. 예 :

class test { 
    public $b; 
    function __construct(&$a) { $this->b = &$a; } 
} 

$a = true; 
$obj = new test($a); 
$a = false; 

$obj->b$a 대한 참조이기 때문에,이 경우 false 될 것이다! 참고로, 당신은 또한 생성자 내에서 $a을 변경, 주위에 그것을 다른 방법을 수행 할 수 있습니다

class test { 
    function __construct(&$a) { $a = false; } 
} 

$a = true; 
$obj = new test($a); 

$a

이제도 전역에 거짓이 될 것이다!

또한 리터럴 값에 대한 참조를 가질 수 없기 때문에 new test(true)을 참조로 전달할 수 없습니다. 다른 변수에 대해서만 참조 할 수 있습니다.

+0

와우 왜이게 downvoted 나를 넘어 ... ... ( –

+0

SiGanteng, 동의합니다. 설명과 함께 좋을 것입니다. –

관련 문제