php中get和set的差別是什麼
php中get和set的區別:「__get()」方法是用來取得私有成員屬性值的,傳回的結果是取得的屬性值,而「__set()」方法是用於設定私有成員屬性值的,該方法沒有傳回值。
本教學操作環境:windows10系統、PHP7.1版、DELL G3電腦
php中get和set的差別是什麼
一般來說,總是把類別的屬性定義為private,這比較符合現實的邏輯。但是,對屬性的讀取和賦值操作是非常頻繁的,因此在PHP5中,預先定義了兩個函數「__get()」和「__set()」來取得和賦值其屬性。類似java中的javabean的操作,所使用的方法也類似,只是不需要像javabean那樣,對每個欄位進行set和get的操作。只需要再加上兩個魔術方法即可。即私有成員的設值和取值的操作。
在PHP5中給我們提供了專門為屬性設定值和取得值的方法,「__set()」和「__get()」這兩個方法,這兩個方法不是預設存在的,而是我們手工添加到類別裡面去的,像構造方法(__construct())一樣,類別裡面添加了才會存在,可以按下面的方式來添加這兩個方法,當然也可以按個人的風格來添加:
//__set()方法用来设置私有属性 public function __set($name,$value){ $this->$name = $value; } //__get()方法用来获取私有属性 public function __get($name){ return $this->$name; }
__get()方法:這個方法用來取得私有成員屬性值的,有一個參數,參數傳入你要取得的成員屬性的名稱,傳回取得的屬性值,這個方法不用我們手工的去調用,因為我們也可以把這個方法做成私有的方法,是在直接取得私有屬性的時候物件自動調用的。因為私有屬性已經被封裝上了,是不能直接取得值的,但是如果你在類別裡面加上了這個方法,在使用「echo$p1->name」這樣的語句直接取得值的時候就會自動呼叫__get($name)方法,將屬性name傳給參數$name,透過這個方法的內部執行,傳回我們傳入的私有屬性的值。如果成員屬性不封裝成私有的,物件本身就不會去自動呼叫這個方法。
__set()方法:這個方法用來為私有成員屬性設定值的,有兩個參數,第一個參數為你要為設定值的屬性名,第二個參數是要給屬性設定的值,沒有回傳值。這個方法同樣不用我們手工去調用,它也可以做成私有的,是在直接設定私有屬性值的時候自動調用的,同樣屬性私有的已經被封裝上
了,如果沒有__set()這個方法,是不允許的,例如:$this->name='zhangsan',這樣會出錯,但是如果你在類別裡面加上了__set($property_name, $value )這個方法,在直接給私有屬性賦值的時候,就會自動呼叫它,把屬性比如name傳給$property_name,把要賦的值「zhangsan」傳給$value,透過這個方法的執行,達到賦值的目的。如果成員屬性不封裝成私有的,物件本身就不會去自動呼叫這個方法。為了不傳入非法的值,還可以在這個方法給做判斷。程式碼如下:
class Person { //下面是人的成员属性,都是封装的私有成员 private $name; //人的名子 private $sex; //人的性别 private $age; //人的年龄 //__get()方法用来获取私有属性 public function __get($property_name) { echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>"; if (isset($this->$property_name)) { return ($this->$property_name); } else { return (NULL); } } //__set()方法用来设置私有属性 public function __set($property_name, $value) { echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>"; $this->$property_name = $value; } } $p1 = new Person(); //直接为私有属性赋值的操作,会自动调用__set()方法进行赋值 $p1->name = "张三"; $p1->sex = "男"; $p1->age = 20; //直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值 echo "姓名:" . $p1->name . "<br>"; echo "性别:" . $p1->sex . "<br>"; echo "年龄:" . $p1->age . "<br>";
程式執行結果:
在直接設定私有屬性值的時候,自動呼叫了這個__set()方法為私有屬性賦值
在直接設定私有屬性值的時候,自動呼叫了這個__set()方法為私有屬性賦值
在直接設定私有屬性值的時候,自動呼叫了這個__set()方法為私有屬性賦值
在直接取得私有屬性值的時候,自動呼叫了這個__get()方法
姓名:張三
在直接取得私有屬性值的時候,自動呼叫了這個__get()方法
性別:男
在直接取得私有屬性值的時候,自動呼叫了這個__get()方法
年齡:20
以上程式碼如果不加上__get()和__set()方法,程式就會出錯,因為不能在類別的外部操作私有成員,而上面的程式碼是透過自動呼叫__get()和_ _set()方法來幫助我們直接存取封裝的私有成員的。
推薦學習:《PHP影片教學》
以上是php中get和set的差別是什麼的詳細內容。更多資訊請關注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仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

Laravel優化Web開發流程的方法包括:1.使用路由系統管理URL結構;2.利用Blade模板引擎簡化視圖開發;3.通過隊列處理耗時任務;4.使用EloquentORM簡化數據庫操作;5.遵循最佳實踐提高代碼質量和可維護性。

在IIS上配置和運行PHP需要以下步驟:1)下載並安裝PHP,2)配置IIS並添加FastCGI模塊,3)創建並設置應用池,4)創建網站並綁定到應用池。通過這些步驟,你可以在Windows服務器上輕鬆部署PHP應用,並通過配置擴展和優化性能來提升應用的穩定性和效率。

HTML5帶來了五個關鍵改進:1.語義化標籤提升了代碼清晰度和SEO效果;2.多媒體支持簡化了視頻和音頻嵌入;3.表單增強簡化了驗證;4.離線與本地存儲提高了用戶體驗;5.畫布與圖形功能增強了網頁的可視化效果。
