【问题标题】:How can I model this data in PHP?如何在 PHP 中对这些数据进行建模?
【发布时间】:2012-04-07 02:01:04
【问题描述】:

我正在寻找为我的 Facebook 集成组件建模数据的最佳方式。在本示例中,我们将查看 Facebook 的相册。每个用户都有一个或多个相册,其中包含一个或多个照片。相册和照片的数据定义可以在这里找到: http://developers.facebook.com/docs/reference/api/album/http://developers.facebook.com/docs/reference/api/photo/

我的主要目标是让 Facebook Graph API 的使用尽可能简单,我特别感兴趣的是让所有我可以完成代码的东西都兼容。 最初,我的想法是在我自己的类中完全按照上述文档中的定义对数据进行建模,例如,对于专辑:

/** * @property string $id 专辑ID * @property Profile $from 创建此相册的个人资料 * @property string $name 专辑名称 * @property string $description 专辑描述 * @property string $location 相册的位置 * @property string $link Facebook 上这张专辑的链接 * @property string $cover_photo 专辑封面照片 ID * @property string $privacy 相册的隐私设置 * @property int $count 此相册中的照片数量 * @property string $type 相册类型:profile, mobile, wall, normal or album * @property string $created_time 相册最初创建的时间(ISO-8601 日期时间) * @property array $likes 用户点赞信息 * @property array $photos 相册中的照片 * @property 数组 $cmets */ 类专辑扩展图表 { /** * 专辑 ID。 * @var 字符串 */ 受保护的$id; /** * 创建此相册的个人资料。 * @var 个人资料 */ 保护$免受; /** *专辑的标题。 * @var 字符串 */ 受保护的$名称; /** *专辑的描述。 * @var 字符串 */ 受保护的$描述; /** *专辑的位置。 * @var 字符串 */ 受保护的$位置; /** * Facebook 上此专辑的链接。 * @var 字符串 */ 受保护的$链接; /** * 专辑封面照片 ID。 * 有效网址 * @var 字符串 */ 受保护的$cover_photo; /** *相册的隐私设置。 * @var 字符串 */ 受保护的$隐私; /** * 此相册中的照片数量。 * @var 字符串 */ 受保护的$count; /** * 相册类型:个人资料、手机、墙、普通或相册。 * @var 字符串 */ 受保护的$类型; /** * 最初创建相册的时间。 * ISO-8601 日期时间 * @var 字符串 */ 受保护的$created_time; /** * 上次更新相册的时间。 * ISO-8601 日期时间 * @var 字符串 */ 受保护的$updated_time; /** * 用户点赞信息 * @var 数组 */ 受保护的 $likes; /** * 张贴在这张专辑中的 cmets * @var 数组 */ 受保护的$cmets; /** * 此相册中的照片 * @var 数组 Graph\Album\Photo */ 受保护的 $photos; /** * 从图表中获取特定专辑 * @param $id 字符串 * @return 相册 */ 公共函数 getAlbum($id) { $this->setFromStdClass($this->getFromGraph("/{$id}")); 返回$这个; } }

使用此方法,我可以在需要时/如果需要,从另一个入口点延迟加载照片,一切都很好,但我无法获得将从请求返回的照片数组的代码完成,据我所知没有办法制作一个支持代码完成的迭代支持对象,如$this->photos[0]->... 我也想知道那里有所有属性是否浪费时间,已经有一个从 Facebook 回来的stcClass,所以我可以存储它在数据对象中,并使用@property 注释和魔术方法从存储在一个属性中的返回的stdClass 中获取数据,例如:

/** * @property string $id 专辑ID * @property Profile $from 创建此相册的个人资料 * @property string $name 专辑名称 * @property string $description 专辑描述 * @property string $location 相册的位置 * @property string $link Facebook 上这张专辑的链接 * @property string $cover_photo 专辑封面照片 ID * @property string $privacy 相册的隐私设置 * @property int $count 此相册中的照片数量 * @property string $type 相册类型:profile, mobile, wall, normal or album * @property string $created_time 相册最初创建的时间(ISO-8601 日期时间) * @property array $likes 用户点赞信息 * @property array $photos 相册中的照片 * @property 数组 $cmets */ 类专辑扩展图表 { 受保护的$数据; 公共函数 __get($name) { $method = '得到' 。 ucfirst($name); if (method_exists($this, $method)) { 返回 $this->{$method}(); } if (property_exists($this->data, $name)) { 返回 $this->data->{$name}; } } }

这为我在声明单个方法时节省了大量时间,而且速度更快,因为我不必遍历返回的 stdClass 来转换为我的模型,并且通常与定义每个属性的代码完成相同。

帮助!

【问题讨论】:

  • 这里的问题到底是什么?
  • 问题是,如何在 PHP 中对这些数据进行建模。具体来说,如何在 PHP 中使用代码完成对其进行建模。

标签: php


【解决方案1】:

取决于 IDE/PHPDoc 支持 - PHPStorm 应该支持 @property SomePhotoCLassName[] ,否则您最终会在数组迭代中使用 @var SomePhotoClassName

【讨论】:

    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2014-07-14
    • 2014-01-29
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多