>백엔드 개발 >PHP 튜토리얼 >PHP의 인터셉터 메소드는 무엇입니까?

PHP의 인터셉터 메소드는 무엇입니까?

黄舟
黄舟원래의
2017-08-18 13:25:264959검색

PHP 인터셉터 메서드에는 다음이 포함됩니다. 1. "__get" 메서드, 2. "__set()" 메서드, 4. "__unset($property)" 메서드, 6. "__call()" 방법.

PHP의 인터셉터 메소드는 무엇입니까?

php는 어떤 인터셉터 메소드를 제공하나요?

1__get($property) 정의되지 않은 속성에 액세스할 때 이 메소드를 호출하세요>= PHP 5.3.0 2__set($property, $value)정의되지 않은 속성에 대한 값을 설정할 때 이 메서드를 호출하세요. >= PHP 5.3.03__isset($property)isset()이 다음과 같은 경우 정의되지 않은 속성에서 호출되면 이 메서드가 호출됩니다. >= PHP 5.1.04 __unset($property) 정의되지 않은 속성에서 unset()이 호출되면 이 메서드가 호출됩니다. >= PHP 5.1.05__call($property, $args_array)호출되지 않음 메소드 정의 시 해당 메소드를 실행합니다. >= PHP 5.3.0PHP 인터셉터란 무엇인가요? 영어 이름 "인터셉터", 이 기능은 정의되지 않은 메서드와 속성을 보내는 메시지를 가로채는 것입니다.
<?php
class School
{

}

$obj = new School;
var_dump($obj->teacher);
[root@localhost php]# php538 interceptor.php 
PHP Notice:  Undefined property: School::$teacher in /usr/local/sina_mobile/apache/htdocs/php/interceptor.php on line 11NULL
이전 코드에 관해서는 선생님 접속시 선생님 속성이 존재하지 않으면 선생님에게 전화요청을 가로채서 몇 가지 연산을 하면 된다고 생각했는데 이게 바로 php 인터셉터, php 인터셉터 입니다. 여기서는 정의되지 않은 속성에 액세스할 때 __get 메서드가 호출됩니다.
자세한 내용은 , http://php.net/manual/zh/언어.oop5.magic.php를 참조하세요. 소개
먼저 코드를 살펴보겠습니다. School 클래스가 정의되고 $obj 객체가 인스턴스화되며 정의되지 않은 속성 Teacher가 얻어집니다. php 명령줄을 사용하여 실행하면 php에서 $obj->teacher 값이 null 값이므로 NULL이 인쇄되는 것을 볼 수 있습니다. 설명은 다음과 같습니다. , php 명령줄 실행 브라우저 페이지의 실행이 반드시 동일하지는 않습니다. 아래 스크린샷을 볼 수 있습니다. 웹 서버가 Apache를 통해 동일한 스크립트를 실행하면 Apache는 PHP 없이 브라우저에 알림을 보고하고 200을 반환합니다. 브라우저는 괜찮습니다. PHP와 웹 서버 간의 상호 작용 및 웹 서버와 브라우저 간의 상호 작용에 문제가 있습니다.

아래 코드와 결과를 살펴보겠습니다

<?php

class School
{
    function __get($var)
    {
       echo $var; echo "\r\n"; 
       return "hello";
    }

    public $name = "Tom";

}

$obj = new School;
var_dump($obj->teacher);
var_dump($obj->name);

다음을 실행한 결과는 다음과 같습니다. 설명을 위해 __get 메소드에는 호출의 정의되지 않은 속성 이름인 매개변수가 있어야 합니다. 호출의 알 수 없는 속성에 대한 결과입니다.

[root@localhost php]# php538 interceptor.php 
teacher
string(5) "hello"
string(3) "Tom"
더 많은 관련 지식을 알고 싶으시다면

PHP 중국어 홈페이지

를 방문해주세요! !

위 내용은 PHP의 인터셉터 메소드는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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