>백엔드 개발 >PHP 튜토리얼 >PHP에서 인용한 여러 사용 예 요약

PHP에서 인용한 여러 사용 예 요약

伊谢尔伦
伊谢尔伦원래의
2017-07-17 16:35:181769검색

PHP 참조(즉, 변수, 함수, 객체 등 앞에 & 기호를 추가하는 것), PHP에서 참조는 서로 다른 이름이 동일한 변수 콘텐츠에 액세스한다는 의미입니다. C언어의 포인터와는 다릅니다. C 언어의 포인터는 변수의 내용과 메모리에 저장된 주소를 저장합니다.

1. 변수 참조
PHP 참조를 사용하면 두 개의 변수를 사용하여 동일한 내용을 지정할 수 있습니다

<?php
    $a="ABC";
    $b =&$a;
    echo $a;//这里输出:ABC
    echo $b;//这里输出:ABC
    $b="EFG";
    echo $a;//这里$a的值变为EFG 所以输出EFG
    echo $b;//这里输出EFG
?>

2. 함수 참조 전송(주소별 호출)
아래에서는 주소별 호출에 대해 자세히 설명하지 않습니다. 코드를 작성하면서

<?php
    function test(&$a)
    {
        $a=$a+100;
    }
    $b=1;
    echo $b;//输出1
    test($b);   //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
    echo "<br>";
    echo $b;//输出101
?>

여기서 test(1); 하면 오류가 발생한다는 점에 유의하세요.
참고: 위의 "test($b);"에서 $b 앞에 앰퍼샌드를 추가하지 마세요. 하지만 "call_user_func_array" 함수에서 전달된 매개변수를 참조하려면 그림과 같이 앰퍼샌드가 필요합니다.

<?php
function a(&$b){
    $b++;
}
$c=0;
call_user_func_array(&#39;a&#39;,array(&$c));
echo $c;
//输出 1
?>

3. 함수 참조 반환
먼저 코드를 살펴보세요

<?php
function &test()
{
    static $b=0;//申明一个静态变量
    $b=$b+1;
    echo $b;
    return $b;
}
$a=test();//这条语句会输出 $b的值 为1
$a=5;
$a=test();//这条语句会输出 $b的值 为2
$a=&test();//这条语句会输出 $b的值 为3
$a=5;
$a=test();//这条语句会输出 $b的值 为6
?>

아래 설명:
이런 식으로 $a=test(); 얻는 것은 실제로 함수 참조 반환이 아닙니다. 일반적인 함수 호출과는 다릅니다. 이것은 PHP의 규정입니다.
PHP에서는 $a=&test()를 통해 얻은 것이 함수의 참조 반환입니다.
참조 반환(PHP)은 무엇입니까? 설명서에 따르면 참조 반환은 참조를 찾기 위해 함수를 사용하려는 경우 변수에 바인딩될 때 사용해야 합니다.) 이 말도 안되는 소리로 인해 오랫동안 이해할 수 없었습니다

4.

<?php
    class a{
        var $abc="ABC";
    }
    $b=new a;
    $c=$b;
    echo $b->abc;//这里输出ABC
    echo $c->abc;//这里输出ABC
    $b->abc="DEF";
    echo $c->abc;//这里输出DEF
?>

위 코드는 PHP5의 실행 효과입니다

PHP5에서는 객체 할당이 참조 프로세스입니다. 위 열에서 $b=new a; $c=$b; 는 실제로 $b=new a; $c=&$b;
PHP5의 기본값은 참조로 객체를 호출하는 것입니다. 객체의 복사본을 만들고 원본 객체의 변경 사항이 복사본에 영향을 미치지 않기를 바랍니다. 이를 위해 PHP5는 __clone이라는 특수 메서드를 정의합니다.
PHP 5부터 new는 자동으로 참조를 반환하므로 여기서 =&를 사용하는 것은 더 이상 사용되지 않으며 E_STRICT 수준 메시지를 생성합니다.
php4에서 객체 할당은 복사 프로세스입니다.
예: $b=new a, 여기서 new a는 익명 객체 인스턴스를 생성하고 $b는 이때 이 익명 객체의 복사본입니다. 같은 방식으로 $c=$b도 $b 내용의 복사본입니다. 따라서 php4에서는 메모리 공간을 절약하기 위해 $b=new a는 일반적으로 참조 모드, 즉 $b=& new a로 변경됩니다.

5. 참조의 역할
프로그램의 규모가 비교적 크고, 동일한 개체를 참조하는 변수가 많아 개체를 사용한 후 수동으로 지우고 싶다면 개인적으로 "&" 방식을 사용하는 것을 추천합니다. $var=null을 사용하면 php5의 기본 방법을 사용할 수 있습니다. 또한 php5에서 큰 배열을 전송하려면 "&" 방법을 사용하는 것이 좋습니다.
6. 참조 해제
참조를 설정 해제하면 변수 이름과 변수 내용 간의 바인딩이 끊어집니다. 이는 변수 내용이 삭제된다는 의미는 아닙니다. 예:

<?php
    $a = 1;
    $b =& $a;
    unset ($a);
?>

는 $b를 설정 해제하지 않고 $a만 설정 해제합니다.
7.global reference
global $var로 변수를 선언하면 실제로 전역변수에 대한 참조가 성립됩니다.

<?php
    $var =& $GLOBALS["var"];
?>

이는 예를 들어 unset $var가 전역 변수를 설정 해제하지 않는다는 것을 의미합니다.
함수 내에서 전역으로 선언된 변수에 참조가 할당되면 해당 참조는 함수 내에서만 표시됩니다. $GLOBALS 배열을 사용하면 이 문제를 피할 수 있습니다.
함수 내 전역 변수 참조

<?php
$var1 = "Example variable";
$var2 = "";
function global_references($use_globals)
{
    global $var1, $var2;
    if (!$use_globals) {
        $var2 =& $var1; // visible only inside the function
    } else {
        $GLOBALS["var2"] =& $var1; // visible also in global context
    }
}
global_references(false);
echo "var2 is set to &#39;$var2&#39;\n"; // var2 is set to &#39;&#39;
global_references(true);
echo "var2 is set to &#39;$var2&#39;\n"; // var2 is set to &#39;Example variable&#39;
?>

global $var;를 $var =& $GLOBALS['var'];의 약어로 취급합니다. 따라서 $var에 다른 참조를 할당하면 지역 변수에 대한 참조만 변경됩니다.

위 내용은 PHP에서 인용한 여러 사용 예 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.