如何从Unsplash PHP封装的PageResult对象中取值及遍历?
问题:无法从Unsplash PHP API的返回对象中获取值
我正在尝试使用Unsplash的PHP API,但不知道如何从返回的对象中获取值。
我的代码:
$search = Unsplash\Search::photos($search, $page, $per_page, $orientation); var_dump($search);
返回结果:
Unsplash\PageResult Object ( [resultClassName:Unsplash\PageResult:private] => Unsplash\Photo [total:Unsplash\PageResult:private] => 1052 [totalPages:Unsplash\PageResult:private] => 351 )
我尝试直接取值但无效:
<?php echo $search->total; ?>
想问:这是因为命名空间的反斜杠问题吗?该如何遍历这个对象?是否需要转为数组?
解决方法
首先,不是命名空间的问题,你取不到值是因为这些属性是private(私有)的,PHP不允许外部直接访问类的私有属性。
Unsplash的PHP SDK肯定提供了对应的公共方法(getter)来获取这些值,优先用官方提供的方法:
- 获取总照片数:
$search->getTotal() - 获取总页数:
$search->getTotalPages() - 获取照片结果列表:
$search->getResults()(用于遍历照片数据)
实际使用示例:
// 输出总数量 echo $search->getTotal(); // 输出总页数 echo $search->getTotalPages(); // 遍历所有照片结果 foreach ($search->getResults() as $photo) { // 获取照片ID echo $photo->getId(); // 获取常规尺寸的照片链接 echo $photo->getUrl('regular'); }
如果确实需要将对象转为数组(不推荐,优先用SDK方法),可以通过PHP反射机制读取私有属性:
$reflection = new ReflectionClass($search); $totalProp = $reflection->getProperty('total'); $totalProp->setAccessible(true); echo $totalProp->getValue($search);
但强烈建议使用SDK提供的公共方法,这样更符合代码规范,也能避免SDK版本更新带来的兼容性问题。
内容的提问来源于stack exchange,提问作者Oli
相关产品推荐
相关产品推荐

