目錄
#(一)、了解PHP中魔術方法的定義" >#(一)、了解PHP中魔術方法的定義
(三)、掌握__isset()魔術方法的用法" >(三)、掌握__isset()魔術方法的用法
(四)、了解__unset()魔术方法的使用场景" >(四)、了解__unset()魔术方法的使用场景
(五)、掌握__unset()魔术方法的用法
 (六)、总结
首頁 後端開發 php教程 PHP魔術方法之__iset,__unset詳解(程式碼實例)

PHP魔術方法之__iset,__unset詳解(程式碼實例)

May 28, 2020 am 09:59 AM
魔術方法

本文目標:

1、了解PHP中魔術方法的定義

#2、了解__isset()魔術方法的使用情境

3、掌握__isset()魔術方法的用法

4、了解__unset()魔術方法的使用場景

5、掌握__unset()魔術方法的用法

#(一)、了解PHP中魔術方法的定義

PHP 將所有以__(兩個底線)開頭的類別方法保留為魔術方法。所以在定義類別方法時,除了上述魔術方法,建議不要以 __ 為前綴。

這2個魔術方法,還有個叫法,也還可以稱作屬性重載的魔術方法

所以目前為止我們學了4個屬性重載的魔術方法了,還有上篇文章中的另外兩個__get,__set

#

(二)以了解__isset()魔術方法的使用情境

當希望在isset(不存在的屬性)或empty(不存在的屬性)時,不報錯,我們可以在類別中定義__isset魔術方法,此刻它會被自動執行

(三)、掌握__isset()魔術方法的用法

# #總結:

1、PHP中__isset在類別中定義格式如下public function __isset(參數1),這裡注意必須是2個__,必須是__isset,而且必須是要帶1個參數,多一個少一個都不行

2、當isset不存在的屬性時,系統會自動觸發物件所在類別的定義好的__isset方法

#3、當empty()不存在的屬性時,系統會自動觸發物件所在類別的定義好的__isset方法

每個總結都是透過實踐得出來的,現在我們用實作來示範總結,這樣可以促進理解,讓每個總結理解起來更清晰,直覺

案例一、

#實踐目標:

1、PHP中__isset在類別中定義格式如下public function __isset(參數1),這裡注意必須是2個__,必須是__isset,而且必須是要帶1個參數,多一個少一個都不行

具體程式碼如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法 
    public  function __isset($name){
        echo "自动执行了Animal类中的__isset方法<br/>";
    }
}
$ani = new Animal();
?>
登入後複製

#運行結果如下:

##空白,說明沒有報錯


現在我們試著不加參數看下

#具體程式碼如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法 
    public  function __isset(){
        echo "自动执行了Animal类中的__isset方法<br/>";
    }
}
$ani = new Animal();
?>
登入後複製

#運行結果如下:

Fatal error: Method Animal::__isset() must take exactly 1 argument in D:\E-class\class-code\classing\index.php on line 11

#由此可見,__isset方法有且只能有一個參數

#案例二、

#實踐目標:

################1、當isset不存在的屬性時,系統會自動觸發對象所在類別的定義好的__isset方法###############具體程式碼如下:######
<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法 
    public  function __isset($name){
        echo "自动执行了Animal类中的__isset方法<br/>";
    }
}
$ani = new Animal();
isset($ani->name);
?>
登入後複製
########執行結果如下:## #######自動執行了Animal類別中的__isset方法###

我们发现其实我们没有手动的去调用__isset方法,也就是说没有写成$ani->__isset(),但是这个方法依然执行了,因为什么呢?因为我们写了isset($ani->name);而这个name属性没有在类中定义,然后这个类中又定义了这个魔术方法,所以它就像魔术一样,突然就被自动执行了

这里一定要注意,是2个下划线,不是一个,否则就不是魔术方法了,下面还是再来做下测试

具体代码如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法 试着少写一个_
    public  function _isset($name){
        echo "自动执行了Animal类中的__isset方法<br/>";
    }
}
$ani = new Animal();
isset($ani->name);
?>
登入後複製

运行结果如下:

空白

说明刚刚那个__isset方法没有被自动执行了,所以一定要注意是2个下划线,就好像构造函数和析构函数一样,都是两个下划线

案例三、

实践目标:

1、当empty()不存在的属性时,系统会自动触发对象所在类的定义好的__isset方法

具体代码如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法
    public  function __isset($name){
        echo "自动执行了Animal类中的__isset方法<br/>";
    }
}
$ani = new Animal();
empty($ani->name);
?>
登入後複製

运行结果如下:

自动执行了Animal类中的__isset方法

由此可见,会自动触发类中定义好的__iset魔术方法的场景,除了在isset不存在的属性时,还在empty不存在的属性时

(四)、了解__unset()魔术方法的使用场景

当希望在unset()不存在的属性时可以自定义自己的逻辑,我们可以在类中定义__unset方法,此刻它会被自动执行,我们可以在里面写自定义逻辑

(五)、掌握__unset()魔术方法的用法

总结:

1、PHP中__unset在类中定义格式如下 public function __unset(参数1),这里注意必须是2个__,必须是__unset,而且必须是要带1个参数,多一个少一个都不行

2、当unset不存在的属性时,系统会自动触发对象所在类的定义好的__unset方法

每个总结都是通过实践得出来的,现在我们用实践来演示总结,这样可以促进理解,让每个总结理解起来更加清晰,直观

案例一、

实践目标:

1、PHP中__unset在类中定义格式如下 public function __unset(参数1),这里注意必须是2个__,必须是__unset,而且必须是要带1个参数,多一个少一个都不行

具体代码如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法
    public  function __unset($name){
        echo "自动执行了Animal类中的__unset方法<br/>";
    }
}
$ani = new Animal();
?>
登入後複製

运行结果如下:

空白

说明没有报错,现在我们来试着不写参数看下

具体代码如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法
    public  function __unset(){
        echo "自动执行了Animal类中的__unset方法<br/>";
    }
}
$ani = new Animal();
?>
登入後複製

运行结果为:

Fatal error: Method Animal::__unset() must take exactly 1 argument in D:\E-class\class-code\classing\index.php on line 11

由此可见,__unset魔术方法,参数有且只能有一个

案例二、

实践目标:

1、当unset不存在的属性时,系统会自动触发对象所在类的定义好的__unset方法

具体代码如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法
    public  function __unset($name){
        echo "自动执行了Animal类中的__unset方法<br/>";
    }
}
$ani = new Animal();
unset($ani->name);
?>
登入後複製

运行结果如下:

自动执行了Animal类中的__unset方法

我们发现其实我们没有手动的去调用__unset方法,也就是说没有写成$ani->__unset(),但是这个方法依然执行了,因为什么呢?因为我们写了unset($ani->name);而这个name属性没有在类中定义,然后这个类中又定义了这个魔术方法,所以它就像魔术一样,突然就被自动执行了

这里一定要注意,是2个下划线,不是一个,否则就不是魔术方法了,下面还是再来做下测试

具体代码如下:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法 试着少写一个_
    public  function _unset($name){
        echo "自动执行了Animal类中的__unset方法<br/>";
    }
}
$ani = new Animal();
unset($ani->name);
?>
登入後複製

运行结果如下:

空白

由此可见,__unset魔术方法没有被自动执行了,所以一定要记得__unset魔术方法也是2个下划线

 (六)、总结

1、本文主要讲了__isset,__unset的使用场景,定义以及具体的实现方法

希望本文能给大家带来一定的帮助,谢谢!!!

以上是PHP魔術方法之__iset,__unset詳解(程式碼實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1250
24
解密Python元程式設計:從基礎到高階典範 解密Python元程式設計:從基礎到高階典範 Feb 19, 2024 pm 03:30 PM

python元程式設計基礎Python元程式設計是動態地操作Python程式碼的能力,這使得Python成為一門非常強大的語言。元編程可以透過以下幾種方式實現:類別裝飾器:類別裝飾器是一種修改類別定義的裝飾器。它可以用來新增或修改類別的屬性和方法,也可以用來控制類別的實例化過程。 defadd_method_to_class(cls):defnew_method(self):print("Thisisanewmethod")setattr(cls,"new_method",new_method)returncls@a

PHP 魔術方法的執行順序如何遵循? PHP 魔術方法的執行順序如何遵循? Apr 17, 2024 pm 09:33 PM

PHP魔術方法的執行順序遵循以下規則:優先順序高的魔術方法優先執行。如果子類別和父類別都定義了同名的魔術方法,則優先執行子類別的魔術方法。如果一個類別既定義了一個常規方法,又定義了同名的魔術方法,則優先執行常規方法。

什麼是魔術方法?如何在 Laravel 中使用 什麼是魔術方法?如何在 Laravel 中使用 Sep 26, 2022 pm 08:21 PM

什麼是魔術方法?如何在 Laravel 的應用?以下這篇文章跟大家介紹PHP 魔術方法在 Laravel應用的方法,希望對大家有幫助!

PHP開發:使用 反射 和 魔術方法 實作程式碼自動產生和動態調用 PHP開發:使用 反射 和 魔術方法 實作程式碼自動產生和動態調用 Jun 15, 2023 pm 04:16 PM

PHP開發中,反射和魔術方法是兩種常用的技巧。當我們需要自動產生程式碼或動態呼叫某些函數時,反射和魔術方法可以使我們的程式碼更加靈活和有效率。在本文中,我們將探討如何使用反射和魔術方法來實現程式碼自動產生和動態呼叫。反射是PHP提供的一種強大的工具,它可以幫助我們在程式運行時取得類別、方法和屬性等資訊。透過反射,我們可以動態地獲取類別或物件的方法、屬性和註釋等信息,使

PHP函數的魔術方法 PHP函數的魔術方法 May 19, 2023 am 08:06 AM

PHP是一種基於C語言開發的伺服器端腳本語言,它在Web開發中廣泛應用。而函數是程式中最基本、最常用的組成部分之一,PHP也提供了許多與函數相關的魔術方法,可以幫助開發者更好地利用函數的優勢。在本文中,我們將介紹PHP函數的魔術方法及其用法。 __construct()__construct()是PHP中最常用的魔術方法之一,它在建立物件時會自動調用,用於初始化

帶你吃透16個PHP魔術方法 帶你吃透16個PHP魔術方法 May 16, 2022 pm 08:45 PM

什麼是魔術方法?這篇文章帶大家了解16個PHP 開發者必知必會的魔術方法,希望對大家有幫助!

魔術方法:在PHP中理解__construct,__destruct等核心方法 魔術方法:在PHP中理解__construct,__destruct等核心方法 Jun 19, 2023 pm 11:22 PM

魔術方法:在PHP中理解__construct,__destruct等核心方法在PHP語言中,有一些特殊的方法被稱為“魔術方法”,其中包括__construct,__destruct等。這些方法在PHP的物件導向程式設計中扮演著重要的角色。本文將講解這些方法的作用和實際應用。 __construct方法__construct方法是個很重要的方法,它是在PHP

PHP入門指南:魔術方法 PHP入門指南:魔術方法 May 20, 2023 am 09:21 AM

PHP作為一種廣泛應用的開發語言,具有豐富的特性,它的魔術方法就是其中之一,本文將為大家介紹PHP中的魔術方法。一、什麼是魔術方法?在PHP中,魔術方法是指一類可以自動呼叫的方法。這些方法使用特殊的名稱,以雙底線(__)開頭和結尾,並在調用它們時具有特殊的行為。二、PHP常用的魔術方法__construct()在創造一個新的物件時,__construc

See all articles