문제
나는 아마 가져야하지만, 나는 이것을 전에 본 적이 없다. Smarty 플러그인의 documenation을 살펴보면 그것에 뛰어 들었습니다.
$smarty =& new Smarty;
= & 특히 사인. Google에 입력하면 다른 검색 엔진과 마찬가지로 무시됩니다. 이것이 무엇에 사용됩니까?
이 기능 서명도 마찬가지입니다.
function connect(&$smarty, $reset = false)
왜 & 기호인가?
다른 팁
실제로이 코드는 PHP 4와 호환되도록 기록됩니다. 앰퍼 랜드는 PHP 5에서 쓸모가 없습니다 (Tim이 말했듯이 PHP 5 이후 모든 객체는 참조별로 전달됩니다).
PHP 4의 경우 모든 변수에 값이 전달되었습니다. 참조로 전달하려면 참조 할당을 선언해야했습니다.
$ref_on_my_object =& new MyObject();
이 코드는 여전히 PHP 5 기본 구성으로 허용되지만 다음을 작성하는 것이 좋습니다.
$ref_on_my_object = new MyObject(); // Reference assignment is implicit
두 번째 문제의 경우, 문제는 "거의 동일"입니다. 받아 들여지지 만 "좋지 않은"관행은 함수 선언 내에서 참조 선언을 피하는 것입니다.
function foo($my_arg) {
// Some processing
}
그리고 참조로 전화하기 위해 ...
$my_var;
$result = foo( &$my_var );
// $my_var may have changed because you sent the reference to the function
이상적인 선언은 다음과 같습니다.
function foo( & $my_input_arg ) {
// Some processing
}
그런 다음 호출이 앰퍼 샌드를 느슨하게합니다.
$my_var;
$result = foo( $my_var );
// $my_var may have changed because you sent the reference to the function
&
참조로 인수를 전달합니다. 이런 방식으로 connect()
조작 할 수 있습니다 $smarty
호출 함수가 수정 된 객체를 검색 할 수 있도록 객체.
비슷하게, =&
참조별로 변수를 설정합니다.
Tim이 변수에 대한 언급이라고 말했듯이. 그러나 최근 버전의 PHP를 사용하는 경우 모든 클래스 객체는 어쨌든 참조로 전달됩니다. 어레이 또는 기타 내장 유형에 대해 전달하는 경우에도 여전히 필요합니다.
첫 번째 예는 참조를 반환하는 것입니다. 두 번째는 참조를 전달하는 것입니다.
PHP에서 모든 것을 읽을 수 있습니다 수동
& PHP의 참조 연산자입니다. 객체에 대한 참조를 반환하는 데 사용됩니다. 이 경우 "New Smarty".
Ampersand는 객체의 값이 아닌 변수에 대한 참조를 할당합니다.
암페어 및 연산자의 주요 용도 중 하나는 메모리 주소를 통과하는 것입니다. 이것은 일반적으로 변수를 변경하고 싶지만 반환되지 않을 때하는 일입니다.
function test_array(&$arr) { $varr[] = "test2"; } $var = array('test'); test_array($var); print_r($var); this should output array( test , test2 );
이것의 목적은 일반적으로 작업중인 실제 사본 [메모리 주소]를 다른 기능 / 객체로 전달해야 할 때입니다. 일반적으로 과거에는 메모리 부족을 완화하고 성능을 높이기 위해 사용되었으며 C / C ++의 기능 및 기타 저수준 언어의 기능입니다.