>  기사  >  백엔드 개발  >  PHP 인용문이란 무엇입니까? PHP 인용 소개(코드 예)

PHP 인용문이란 무엇입니까? PHP 인용 소개(코드 예)

不言
不言원래의
2018-09-17 15:44:092581검색

이 기사에서는 PHP 인용이 무엇인지 설명합니다. PHP에 인용된 소개(코드 예제)에는 특정 참고 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 참조란 무엇입니까

PHP에서 참조는 동일한 변수 내용에 다른 이름으로 액세스하는 것을 의미합니다.
PHP에서는 변수 이름과 변수 내용이 다르기 때문에 동일한 내용이라도 다른 이름을 가질 수 있습니다.
가장 가까운 비유는 Unix 파일 이름과 파일 자체입니다. 변수 이름은 디렉터리 항목이고 변수 내용은 파일 자체입니다. 참조는 Unix 파일 시스템의 하드 링크로 간주될 수 있습니다.

PHP의 참조는 C의 포인터와 다릅니다. 예를 들어 포인터 연산을 수행할 수 없습니다. 참조는 실제 메모리 주소가 아니라 기호 테이블 별칭입니다.

2. 참조의 특징

PHP의 참조는 두 개의 변수가 동일한 내용을 가리키는 것을 허용합니다.

$a =& $b;

이는 $a와 $b가 동일한 변수를 가리킨다는 의미입니다.

$a와 $b는 여기에서 정확히 동일합니다. $a가 $b를 가리키는 것이 아니고 그 반대도 아닙니다. $a와 $b가 같은 위치를 가리키는 것입니다.

참조가 있는 배열을 복사하면 해당 값은 역참조되지 않습니다. 배열 값을 함수에 전달할 때도 마찬가지입니다.

$a = 'a';

$arr1 = [
    'a' => $a,
    'b' => &$a, // $arr1['b'] 与 $a 指向同一个变量
];

// 将 $arr1 传值赋值给 $arr2
$arr2 = $arr1;

print_r($arr2); // $arr2 的值为 ['a' => 'a', 'b' => 'a']

// 修改 $a 的值为 'b'
$a = 'b';

print_r($arr2); // $arr2 的值为 ['a' => 'a', 'b' => 'b']


function foo($arr){
    // 将 $arr['b'] 的值改为 'c';
    $arr['b'] = 'c';
}

echo $a; // $a 的值为 'b'

// 将 $arr1 传入函数
foo($arr1);

echo $a; // $a 的值为 'c'

정의되지 않은 변수가 참조로 할당되거나, 참조 매개변수로 전달되거나, 참조로 반환되면 해당 변수가 자동으로 생성됩니다.

// 定义函数 foo(),通过引用传递参数
function foo(&$var) { }

foo($a); // 创建变量 $a,值为 NULL
var_dump($a); // NULL

foo($b['b']); // 创建数组 $b = ['b' => NULL]
var_dump(array_key_exists('b', $b)); // bool(true)

$c = new StdClass;
foo($c->d); // 创建对象属性 $c->d = NULL
var_dump(property_exists($c, 'd')); // bool(true)

함수 내에서 전역으로 선언된 변수에 참조가 할당되면 해당 참조는 함수 내에서만 표시됩니다. $GLOBALS 배열을 사용하면 이 문제를 피할 수 있습니다.

$var1 = 'var1';
$var2 = 'var2';

function global_references($use_globals)
{
    global $var1, $var2;
    if (!$use_globals) {
        $var2 = & $var1; // $var2 只在函数内部可见
    } else {
        $GLOBALS["var2"] = & $var1; // $GLOBALS["var2"]在全球范围内也可见
    }
}

global_references(false);
echo "var2 is set to '$var2'\n"; // var2 is set to 'var2'
global_references(true);
echo "var2 is set to '$var2'\n"; // var2 is set to 'var1'

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

foreach 문에서 참조가 있는 변수에 값을 할당하면 참조된 개체도 변경됩니다.

$ref = 0;
$row = & $ref;
foreach ([1, 2, 3] as $row) {
    // do something
}
echo $ref; // 3 - 遍历数组的最后一个元素

3. 참조로 전달

변수를 참조로 함수에 전달하면 함수가 매개변수 값을 수정할 수 있습니다.

function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);

echo $a; // 6

함수 호출에는 참조 기호가 없으며 함수 정의에만 참조 기호가 있습니다. 매개변수를 참조로 올바르게 전달하려면 함수 정의만으로도 충분합니다. 참조로 전달할 수 있는 것은 무엇입니까? 함수를 사용하여 참조가 바인딩되어야 하는 변수를 찾습니다. 참조로 반환될 수 있습니다.

성능을 높이기 위해 반환 참조를 사용하지 마세요. 엔진은 스스로 최적화할 만큼 똑똑합니다. 유효한 기술적 이유가 있는 경우에만 참조를 반환하십시오!

function foo(&$var)
{
    $var++;
}

$a=5;
foo($a);

echo $a; // 6
는 매개변수 참조 전달과 다릅니다. 참조 반환은 두 위치에서 앰퍼샌드를 사용해야 합니다. 이는 일반적인 복사본 대신 참조가 반환된다는 것을 나타냅니다. . 참조 반환은 변수만 반환할 수 있습니다. return intval($this->value);와 같이 함수에서 참조를 반환하려고 하면 함수가 참조된 변수가 아닌 표현식의 결과를 반환하려고 하기 때문에 오류가 발생합니다. 함수에서는 참조 변수만 반환할 수 있으며 다른 방법은 없습니다.
function foo(&$var)
{
    $var++;
    echo $var; // 6
}

function &bar()
{
    $a = 5;
    return $a;
}

foo(bar());

    5. Unreference
  • 참조를 설정 해제하면 변수 이름과 변수 내용 간의 바인딩이 끊어집니다. 이는 변수 내용이 삭제된다는 의미는 아닙니다.
function foo(&$var)
{
    $var++;
}

function bar() // 注意,这个函数不返回引用
{
    $a = 5;
    return $a;
}

foo(bar()); // 自 PHP 5.0.5 起导致致命错误,自 PHP 5.1.1 起导致严格模式错误,自 PHP 7.0 起导致 notice 信息

foo($a = 5); // 表达式,不是变量。PHP Notice:  Only variables should be passed by reference

foo(5); // PHP Fatal error:  Only variables can be passed by reference
  • 6. Discovered

  • 많은 PHP 구문 구조가 참조 메커니즘을 통해 구현되므로 참조 바인딩에 대한 위의 모든 내용도 이러한 구조에 적용됩니다.

    전역 참조

    전역 $var로 변수를 선언하면 전역 변수에 대한 참조가 실제로 함수 내부에 설정됩니다. 즉, 이 작업의 효과는 동일합니다.

    class Foo {
        public $value = 42;
    
        public function &getValue() {
            return $this->value;
        }
    }
    
    $foo = new Foo;
    // $myValue 是 $obj->value 的引用.
    $myValue = &$foo->getValue();
    // 将 $foo->value 修改为 2
    $foo->value = 2;
    echo $myValue;  // 2
    이는 unset $var가 전역 변수 $GLOBALS["var"]를 설정 해제하지 않는다는 의미입니다.

    $this

    객체의 메서드에서 $this는 항상 이를 호출하는 객체에 대한 참조입니다.

    위 내용은 PHP 인용문이란 무엇입니까? PHP 인용 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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