使用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个属性“也去建一个实体类。(太空虚?)

如果 从前端往逻辑层 和数据层 用类来传递数据,需要 第一种实体类的写法。

原文地址:https://www.cnblogs.com/dengcw/p/5685733.html