__get仅针对不存在或不可见的属性进行调用.换句话说,当你写如果prop被定义并且在当前上下文中可见,则它将按原样返回,而不调用__get.例:这就解释了为什么magic->a不调用吸气剂.现在,由于你也定义了setter,所以magic->c=CC实际上改变了类的受保护成员,因此,当你稍后回覆magic->c时,这仍然调用getter,而getter返回这个>b[c],而不是这个>c的实际值.以下是您的代码,为了清楚起见,稍作改写:结果:给读者一个练习:如果您更换点,为什么输出不同.在echo语句中用