首頁 >後端開發 >php教程 >php有哪些攔截器方法

php有哪些攔截器方法

黄舟
黄舟原創
2017-08-18 13:25:264956瀏覽

php攔截器方法有:1、「__get」方法、2、「__set()」方法;3、「__isset()」方法;4、「__unset($property)」方法;6、 “__call()”方法。

php有哪些攔截器方法

php提供了哪些攔截器方法

序號 方法名稱 作用 實作版本
1 __get($property) 存取未定義的屬性時候,呼叫該方法 >= PHP 5.3.0
2 __set($property, $value) 給未定義屬性設定值的時候,呼叫該方法 >= PHP 5.3.0
3 __isset($property) #對未定義屬性呼叫isset()時,呼叫該方法 > = PHP 5.1.0
4 __unset($property) 對未定義屬性呼叫unset()時,呼叫該方法 >= PHP 5.1.0
5 __call($property, $args_array) 當呼叫未定義方法時,執行此方法 >= PHP 5.3.0

#詳細情況請見http://php.net/manual/zh/language.oop5. magic.php介紹

什麼是PHP攔截器?

英文名稱 “interceptor”,作用是 攔截 發送未定義的方法和屬性的訊息。

先看一段程式碼,定義了一個School類,實例化一個物件$obj,取得一個未定義的屬性teacher,會發生什麼事?

<?php
class School
{

}

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

如果使用php命令列執行,可以看出,php報了一個未定義屬性的Notice, $obj->teacher值是空值,所以印出NULL

[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命令列執行和瀏覽器頁面執行不一定完全一樣,我們可以看下面截圖,web server是apache執行同樣腳本時候,apache回告瀏覽器的是未帶php報出的Notice,回傳給瀏覽器的是一個200 OK,這裡面有這php和web server的互動以及web server和瀏覽器的互動問題。

1 (1).png

針對前面的程式碼,我們想,如果訪問teacher的時候,teacher屬性不存在,我們可以攔截到對teacher的呼叫請求,並且做一些操作,那麼這個就是php的攔截器,php攔截器提供了多種方法,這裡__get方法就是存取未定義的屬性時候被呼叫的。

我們看下面程式碼和結果

<?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方法必須擁有一個參數,該參數就是呼叫的未定義的屬性名稱,函數會將return 結果賦值給該呼叫的未知屬性。

[root@localhost php]# php538 interceptor.php 
teacher
string(5) "hello"
string(3) "Tom"

更多相關知識,請造訪 PHP中文網! !

以上是php有哪些攔截器方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn