我不清楚如何使 PHP 类文件在 Laravel 上具有不同的输出?


$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()进行不同的输出。

最新更新