복붙노트

PHP 경고 : 호출 시간 기준 전달은 더 이상 사용되지 않습니다.

PHP

PHP 경고 : 호출 시간 기준 전달은 더 이상 사용되지 않습니다.

경고 메시지가 나타납니다 : 다음 코드 줄에 대한 호출 시간 통과 참조가 사용되지 않습니다.

function XML() {
    $this->parser = &xml_parser_create();
    xml_parser_set_option(&$this->parser, XML_OPTION_CASE_FOLDING, false);
    xml_set_object(&$this->parser, &$this);
    xml_set_element_handler(&$this->parser, 'open','close');
    xml_set_character_data_handler(&$this->parser, 'data');
}
function destruct() {
    xml_parser_free(&$this->parser);
}
function & parse(&$data) {
    $this->document = array();
    $this->stack    = array();
    $this->parent   = &$this->document;
    return xml_parse(&$this->parser, &$data, true) ? $this->document : NULL;
}

그것이 원인과 그것을 고치는 방법은 무엇입니까?

해결법

  1. ==============================

    1.& $ this를 & $ this에서 제거하면 필요하지 않습니다. 사실,이 코드에서 어디에서나 제거 할 수 있다고 생각합니다. 전혀 필요하지 않습니다.

    & $ this를 & $ this에서 제거하면 필요하지 않습니다. 사실,이 코드에서 어디에서나 제거 할 수 있다고 생각합니다. 전혀 필요하지 않습니다.

    긴 설명

    PHP는 두 가지 방법으로 변수를 전달할 수 있습니다 : "값"과 "참조". 첫 번째 방법 ( "가치에 의한"), 당신은 그들을 수정할 수 없습니다, 다른 두 번째 방법 ( "참조") 당신은 할 수 :

         function not_modified($x) { $x = $x+1; }
         function modified(&$x) { $x = $x+1; }
    

    & 기호에 유의하십시오. 변수에 대해 수정 한 것을 호출하면 not_modified를 호출하면 수정되고, 인수의 값이 반환되면 동일한 값이됩니다.

    이전 버전의 PHP에서는 not_modified (& $ x)를 사용하여 not_modified로 수정 된 동작을 시뮬레이션 할 수있었습니다. 이것은 "참조에 의한 호출 시간 전달"입니다. 이는 더 이상 사용되지 않으므로 사용하지 않아야합니다.

    또한, 매우 오래된 PHP 버전 (PHP 4 및 이전 버전)에서는 객체를 수정하는 경우 참조로 전달해야하므로 & $ this를 사용하십시오. 객체가 함수로 전달 될 때 항상 수정되므로 즉, 다음과 같이 작동하므로 더 이상 필요하거나 권장하지 않습니다.

       function obj_modified($obj) { $obj->x = $obj->x+1; }
    

    이것은 공식적으로 "값"에 의해 전달 되더라도 $ obj-> x를 수정하지만, PHP 4에서와 같이 오브젝트 핸들 (자바 등에서와 같이)과 객체의 복사본은 전달되지 않습니다.

    즉, 이상한 일을하지 않는 한 객체를 전달할 필요가 거의 없습니다. 따라서 호출 시간이든 다른 방법이든 참조로 $를 전달할 필요가 거의 없습니다. 특히 코드에 필요하지 않습니다.

  2. ==============================

    2.혹시 궁금한 점이있는 경우, 참조로 작성된 호출 시간 전달은 PHP의 느슨한 입력을 조장하는 사용되지 않는 PHP 기능입니다. 기본적으로, 그것은 특별히 C 포인터와 같은 종류의 참조를 특별히 요구하지 않은 함수에 전달할 수있게 해줍니다. 둥근 구멍 문제에서 사각형 펙에 대한 PHP의 해결책입니다. 당신의 경우에는 $ this를 절대 참조하지 마십시오. 클래스 밖에서는 $ this에 대한 참조로 private 메소드와 필드에 액세스 할 수 없습니다.

    혹시 궁금한 점이있는 경우, 참조로 작성된 호출 시간 전달은 PHP의 느슨한 입력을 조장하는 사용되지 않는 PHP 기능입니다. 기본적으로, 그것은 특별히 C 포인터와 같은 종류의 참조를 특별히 요구하지 않은 함수에 전달할 수있게 해줍니다. 둥근 구멍 문제에서 사각형 펙에 대한 PHP의 해결책입니다. 당신의 경우에는 $ this를 절대 참조하지 마십시오. 클래스 밖에서는 $ this에 대한 참조로 private 메소드와 필드에 액세스 할 수 없습니다.

    예:

    <?php
    function test1( $test ) {} //This function doesn't want a reference
    function test2( &$test ) {} //This function implicitly asks for a reference
    
    $foo = 'bar';
    test2( $foo ); //This function is actually given a reference
    test1( &$foo ); //But we can't force a reference on test1 anymore, ERROR
    ?>
    
  3. from https://stackoverflow.com/questions/4665782/php-warning-call-time-pass-by-reference-has-been-deprecated by cc-by-sa and MIT license