$taxonomies = $post->taxonomies()->get();
但是当我使用"echo"语句时,它的结果是如下所示的字符串。
echo $taxonomies[0];
// {"term_taxonomy_id":317,"term_id":317,"taxonomy":"skill","description":"","parent":0,"count":1,"pivot":{"object_id":4886,"term_taxonomy_id":317},"term":{"term_id":317,"name":"Consulting","slug":"consulting","term_group":0}}
但是当我使用"print_r"语句时,它的结果是如下所示的对象
print_r($taxonomies[0]);
CorcelModelTaxonomy Object
(
[table:protected] => term_taxonomy
[primaryKey:protected] => term_taxonomy_id
[with:protected] => Array
(
[0] => term
)
[timestamps] =>
[postType:protected] =>
[connection:protected] => wordpress
[keyType:protected] => int
[incrementing] => 1
[withCount:protected] => Array
(
)
[perPage:protected] => 15
[exists] => 1
....
我不清楚它是如何工作的?
情况是echo
将某个类的对象转换为字符串。而您,作为开发人员,可以使用魔术方法控制此过程__toString
.
深入研究代码,您可以看到CorcelModelTaxonomy
扩展类,进而扩展lluminateDatabaseEloquentModel
。在此类中,有__toString
方法可以将对象转换为 json。
至于print_r
- 此函数不会将对象转换为任何其他类型,仅输出可读的对象表示。
一个是 JSON 表示法,另一个是内存中实例的转储。
使用serialize()
或json_enode()
进行不同的输出。