Ⅰ php中 unset刪除對象中的私有屬性後 用isset判斷這個屬性是否存在,但是一直返回true
原因在於,在__isset方法中,對house_owner屬性是否存在進行了判斷,而unset操作只是將值和變數名之間的關系解除,並沒有把屬性本身刪除。也就是說property_exists()方法,是判斷屬性是否存在,並不是屬性是否有值。所以在調用isset時,每次都調用__isset魔術方法,而property_exists()方法始終返回true,所以會導致判斷時,始終為true。
Ⅱ php 讀取文件不存在返回404
兩個方法:
第一個你程序上判斷文件是否存在,存在正常,不正常給用戶跳轉一個頁面(不要直接跳轉首頁)
第二個伺服器端(Apache和iss)
為Apache Server設置 404錯誤頁面的方法很簡單,只需在.htaccess 文件中加入如下內容即可:ErrorDocument 404 /notfound.php
iss設置靜態404錯誤頁面的方法則比較簡單,在IIS管理器中右鍵單擊要管理的網站,打開「屬性」中的「自定義錯誤信息」頁,為「404」設定相應的錯誤信
息頁即可。不過,此處在「消息類型」中一定要選擇「文件」或「默認值」,而不要選擇「URL」,不然,將導致返回「200」狀態碼。
Ⅲ php類里,某個方法的參數,沒有定義成類的屬性,那這個方法的參數是以哪種形態存在的 默認成了類的屬性嗎
1、這個$a和$b是類中函數add的形式參數,離開里函數就不能使用了。因為形參變數只有在函數被調用時分配內存。調用結束了就立刻釋放了內存。
而類的屬性,只要是在類的范圍內各個方法都可以調用。比如
<?php
class Match{
public $c = 2;
public function add($a,$b){
return $this->c;
}
public function get_c(){
return $this->c;
}
}
類屬性$c可以在add和get_c兩個方法都能調用,所以你說「方法參數默認為了類的屬性」是不正確的。
2、方法的參數不用定義成對象的屬性(是「類的屬性」吧?)。根據第一點,函數的形參和類屬性沒關系。
Ⅳ php對象訪問不存在的類屬性
使用get()和set()而不使用public的成員變數,是因為我們設計類的時候要遵循這樣的原則:
提供類的人要盡量將類中有什麼隱藏起來,只告訴使用者你能做什麼
使用類的人不關心你的類中有什麼,只關心類提供了什麼功能
所以設計類的時候要盡量不提供public的成員變數,最好一個都沒有,只提供介面
這條原則其實不僅是代碼規范的問題,放到工作中,這就是多項目組或多部門之間合作的准則
這條原則也絕對不是某個獨自編碼的程序狼一拍腦袋就想出來,這是經歷過有組織開發過工作的程序猿才能設計出來的。
————————————————————————————————————————————————————————————
這個問題其實很簡單,比如
setAge(int age){
if(age<1||age>120)
throw new Exception(" 你輸入的年齡不合法");
}else{
this.age=age;
}
這個是public變數做不到的,安全是其中一個原因,另外樓主你要是學過Hiberante和Spring的話,就會知道
一些類的變數,即使是public的,也必須寫上set方法,否則就出錯,框架設計的時候就這么要求的
所以別人都這么做的時候,你這么做只會有好處而不會有壞處,這就是標准