PHP 경고 : 호출 시간 기준 전달은 더 이상 사용되지 않습니다.
PHPPHP 경고 : 호출 시간 기준 전달은 더 이상 사용되지 않습니다.
경고 메시지가 나타납니다 : 다음 코드 줄에 대한 호출 시간 통과 참조가 사용되지 않습니다.
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.& $ 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.혹시 궁금한 점이있는 경우, 참조로 작성된 호출 시간 전달은 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 ?>
from https://stackoverflow.com/questions/4665782/php-warning-call-time-pass-by-reference-has-been-deprecated by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
Javascript 배열 전달 -> PHP (0) | 2018.09.17 |
---|---|
컨텍스트에 관계없이 SimpleXML 객체를 문자열로 강제 변환 (0) | 2018.09.17 |
$ _POST를 사용하여 HTML에서 선택 옵션 값 얻기 (0) | 2018.09.17 |
strpos에서 바늘로 배열 사용하기 (0) | 2018.09.17 |
PDO를 사용하여 NULL 값을 삽입하려면 어떻게해야합니까? (0) | 2018.09.17 |