使用PHP創建實體類的一個認識誤區


最近看到學員在問這樣的問題(轉載)

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個屬性“也去建一個實體類。(太空虛?)

 

如果 從前端往邏輯層 和數據層 用類來傳遞數據,需要 第一種實體類的寫法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM