五分鐘帶你了解PHP中的魔術方法(實例詳解)
在之前的文章中為大家帶來了《PHP中clone關鍵字和__clone()方法的使用(實例詳解)》,其中給大家詳細的介紹了PHP中的clone關鍵字和__clone()方法,這篇文章繼續帶給大家PHP中的魔術方法,希望對大家有幫助!
在我們之前的文章中,我們介紹__clone()方法的時候提到,這是魔術方法的一種,《帶你分清類中的建構子與析構函式》中也提到的建構子與析構函式也叫作建構法與析構法,他們也是魔術方法的一種。那什麼是魔術方法呢?它有哪些常用的方法?它又是怎樣使用的?接下來我們一起來看看吧。
PHP魔術方法
在PHP物件導向程式設計中,PHP裡有一系列的魔術方法,這些魔術方法看看先前學習的__clone
\__construct
\__destruct
我們能發現一個共同點,那就是它們都是由__
兩個下劃線開始的,並且都是在某種特定的條件下自動調用的。
那接下來我們來看看一些常用的魔術方法,結合實例來看它們的使用方法。
<strong><span style="font-size: 18px;">__set()</span></strong>
#__set()
方法用於在為當前環境下未定義或不可見的類別屬性賦值時,需要注意的是所有的魔術方法,都是在某種特定條件下自動調用的,為當前環境下未定義或不可見的類別屬性賦值時就是__set()
方法呼叫的特定條件。
語法格式如下:
public function __set(要操作的变量, 要操作变量的值){ ... ... ; }
實例如下:
<?php class father{ public $study1; private $study2; public function __set($key, $value){ echo '为“'.$key.'”赋值“'.$value.'”失败!<br>'; } } $object = new father(); $object -> study1 = '好好学习'; $object -> study2 = '天天向上'; $object -> study3 = '福如东海'; ?>
輸出結果:
#上述實例看出,當目前環境下未定義或不可見的類別屬性賦值時,就會呼叫__set()方法。
<strong><span style="max-width:90%">__get()</span></strong>
#方法
自動呼叫 __get()
方法的特定條件是在呼叫或取得目前環境下未定義或不可見的類別屬性時,定義該方法的語法格式如下:
public function __get($name){ ... ... ; }
其中參數$ name表示要操作的變數名稱,以下透過實例我們來看一下__get()方法的使用,實例如下:
<?php class father{ public $study = '好好学习'; private $study1 = '天天向上'; public function __get($study1){ echo '获取:“'.$study1.'”失败!'; } } $object = new father(); echo $object -> study.'<br>'; echo $object -> study1.'<br>'; echo $object -> study2.'<br>'; ?>
輸出結果:
由上述結果可以看出在呼叫或取得目前環境下未定義或不可見的類別屬性時,會自動呼叫__get() 方法。
<strong><span style="max-width:90%">__isset()</span></strong>
# 方法
自動呼叫__isset () 方法的特定條件是當在類別外部對類別中不可存取或不存在的屬性使用 isset()
或empty()
函數時,該方法的語法格式如下:
public function __isset($name){ ... ... ; }
其中我們需要注意的是:
參數$name 為要存取的屬性名稱。
isset()
函數是用來檢查一個變數是否存在並且還要判斷不為NULL,如果傳入的變數存在則傳回true,不存在傳回false。empty()
函數是用來檢查一個變數是否為空,如果變數的值等於 FALSE,那麼這個變數會被認為不存在。如果想要使用isset() 或empty() 函數對類別中的私有屬性進行偵測的話,我們只需要在類別中加入一個__isset() 方法就可以了,當在類別外部使用isset() 或empty() 函數時,會自動呼叫類別裡面的__isset() 方法。
接下來我們透過實例來看__isset()方法的使用,實例如下:
<?php class father{ public $study = '好好学习'; private $name = '天天向上'; public function __isset($name){ if(property_exists('Website', $name)){ echo '成员属性:“'.$name.'”存在!<br>'; }else{ echo '成员属性:“'.$name.'”不存在!<br>'; } } } $object = new father(); isset($object -> mother); isset($object -> name); ?>
輸出結果:
其中我們需要注意的是,property_exists()
函數可以用來偵測類別中是否定義了該屬性,語法格式為
property_exists($class_name,$property_name)
其中$class_name 為字串形式的類別名,即判斷類別class_name 中是否定義了property_name 屬性。
<strong><span style="max-width:90%">__unset() </span></strong>
#方法
自動呼叫__unset()
方法的特定條件是當在類別外部對類別中不可存取或不存在的屬性使用unset() 函數時,該方法的語法格式如下:
public function __unset($name){ ... ... ; }
其中我们需要注意的是:
参数 $name 为要访问的属性名称。
unset() 函数的作用是删除指定的变量,需要传入一个或多个变量作为参数,另外,该函数没有返回值。
可以使用 unset() 函数在类外部去删除类中的成员属性。如果要删除类中的公有属性的话直接使用 unset() 函数即可;
如果要删除类中的私有属性的话,则需要在类中添加一个 __unset() 方法。
接下来我们通过实例来看一下__unset()方法的使用,实例如下:
<?php class father{ public $name = 'http://c.biancheng.net/php/'; private $study = 'C语言中文网'; public function __unset($study){ if(property_exists('father', $study)){ unset($this->$study); echo '移除成员属性:“'.$study.'”成功!<br>'; }else{ echo '成员属性:“'.$study.'”不存在!<br>'; } } } $object = new father(); unset($object->name); unset($object->study); unset($object->study1); ?>
输出结果:
由上述实例看出当在类外部对类中不可访问或不存在的属性使用 unset() 函数时,__unset() 方法会被自动调用。
上述实例中给大家介绍了一些常用的魔术方法,但这并不是魔术方法的全部,那接下来再给大家列举一些魔术方法:
__call()
--- 调用一个不存在的方法时自动调用__sleep()
--- 使用 serialize 序列化时自动调用__toString()
--- 把对象转换成字符串时自动调用__invoke()
--- 当尝试把对象当方法调用时自动调用__wakeup()
--- 使用 unserialize 反序列化时自动调用__callStatic()
--- 调用一个不存在的静态方法时自动调用__debugInfo()
--- 使用 var_dump() 打印对象信息时自动调用__set_state()
--- 当使用 var_export() 函数时自动调用,接受一个数组参数
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
以上是五分鐘帶你了解PHP中的魔術方法(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
