標籤:
最近看到學員在問這樣的問題(轉載)
1、php如何?類似 java的set和get
2、PHP如何構建實體類
之前也有很多人問,那麼這裡來簡單解答一下。
3句話:
1、關於java或者.net中使用實體類的作用、好處和有逼格支出大家請自行百度,不再贅述。
2、PHP如果業務不是十分複雜(譬如複雜到你根本記不清到底有多少個業務資料表),一般不需要建立實體類
3、不要在PHP上面研究什麼泛型之流的東西。如果硬要這樣,為何不直接使用java? PHP就是為了快帥酷的做web,PHP要是哪天變的和java一樣的文法結構,或者甚至必須編譯後才能運行。那麼我絕對會放棄PHP而直接使用 Java
那麼問題來了。譬如我就喜歡和java那樣用實體類的寫法該怎麼辦?
譬如
function getNews()
{
這裡我要返回一個新聞實體類集合。
譬如 $news=new NewsMapper();
$news->title=”xxx”;
$news->id=xxx;
return array($news);
}
到這個代碼。很多人會因為“受 java或.net”影響,特別的在外部建立一個 類叫做NewsMapper,譬如:
class NewsMapper
{
public $title=””;
public $id=0;
}
當然這麼做,是可以的。也沒啥問題,到時候你只要include或require正確即可、
標題中我講的”誤區“,並不是說上面這個寫法是錯的。而是有的小夥伴認為 必須這麼寫才行。(這才是誤區)
那麼請看,如果不使用上面的寫法我們應該怎麼辦?
function getNews() // 還是這個方法
{
這裡我要返回一個新聞實體類集合。
譬如
$news->title=”xxx”;
$news->id=xxx;
return array($news);
}
是的。你沒看錯,直接這麼寫就可以了。
只不過,運行時會報出一個警告,告訴你$news對象沒有定義之流。 其實可以直接在php.ini中關閉這個警告
當然,為了”規範“,你就是不想關閉警告的話可以這麼寫
function getNews() // 還是老夫我
{
這裡我要返回一個新聞實體類集合。
譬如 $news=new stdClass(); //注意這裡
$news->title=”xxx”;
$news->id=xxx;
return array($news);
}
是的。你沒看錯,這樣就可以了。stdClass是PHP最頂層的類,不包括任何屬性和方法。等於是一個不穿衣服的裸體類。
當你執行$news->title時。 PHP自動會幫你增加屬性。以此類推。
這種做法的一般用於返回json格式,供前台調用。同時你在其他地方並不需要知道這個類是啥類,不需要知道類名。只需要調用這個類的屬性。
另外,如果你僅僅是臨時使用,就像PHP7的匿名類一樣。那麼應當使用這種方法。而不是”就1-2個屬性“也去建一個實體類。(太空虛?)
如果 從前端往邏輯層 和資料層 用類來傳遞資料,需要 第一種實體類的寫法。
使用PHP建立實體類的一個認識誤區