为什么print_r没有显示WP_User对象的所有属性?

时间:2017-12-01 03:05:29

标签: php wordpress

如果我这样做,我会显示许多属性,包括display_name,但不显示名字和姓氏

$user = get_userdata( 4 );
print_r( $user );

然而,他们显然存在,因为如果我立即这样做,我会显示正确的姓氏。 Wordpress文档还提到last_name为属性。

echo $user->last_name;

那为什么print_r没有显示所有属性?这使得能够使用print_r来发现信息产生了很多疑问。

1 个答案:

答案 0 :(得分:3)

last_name不是WP_User的真正属性,但它可通过魔术方法提供,以实现向后兼容。

它被列为公共财产in the docs,但这有点误导。更准确地说,您可以访问它作为公共财产。但是当你看the code时,它会被魔术方法检索和设置。

代码证明

这里是最相关代码的摘录,显示了Wordpress如何在一个名为{{1}的私有静态属性中实际保存这些向后兼容属性的列表,包括last_name。 }。当用户请求其中一个属性时,将调用魔术方法back_compat_keys。魔术方法使用__get来实际检索该属性的数据。换句话说,数据实际上并不存储在get_user_meta()对象中; Wordpress只是让你假装它是,它只在明确请求时才提取它。这是代码:

WP_User