문제

나는 아마 가져야하지만, 나는 이것을 전에 본 적이 없다. 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 ++의 기능 및 기타 저수준 언어의 기능입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top