打印输出时异常对象的字段

请查看当我打印出 Exception 对象的内容时得到的输出(使用此处的内置类):


    Exception Object

(

    [message:protected] => My custom message

    [string:Exception:private] => 

    [code:protected] => 2281488

    [file:protected] => /home/user/scripts/test.php

    [line:protected] => 18

    [trace:Exception:private] => Array

        (

        )


    [previous:Exception:private] => 

)

大多数字段都具有field_name:visibility_keyword格式,但其中两个字段之间出现异常。这是什么意思?


此外,官方手册中没有提到其他两个字段,即$stringand $trace,但我知道后者在函数内抛出异常对象时接收一个值,因此它包含调用函数的顺序,直到其中一个创建说异常。


当我尝试回显异常并保持为空时,字符串字段会被分配一个值,除非我在打印出对象的内容之前回显它。你能告诉我这个领域是如何运作的吗?


我会很感激我能得到的任何意见。谢谢!


aluckdog
浏览 112回答 2
2回答

慕村225694

这与异常无关,它只是如何显示对象的私有var_dump()和print_r()受保护属性。私有属性总是显示在类的名称之前,:private 它告诉您继承层次结构中的哪个类可以访问该属性。受保护的属性不需要这样做,因为层次结构中的任何类都可以访问它们。class Class1 {    private $private1;    protected $protected1;    public $public1;}class Class2 extends Class1 {    private $private2;    protected $protected2;    public $public2;}print_r(new Class2);显示Class2 Object(    [private2:Class2:private] =>     [protected2:protected] =>     [public2] =>     [private1:Class1:private] =>     [protected1:protected] =>     [public1] => )手册中没有提到私有属性,因为它们不是公共接口的一部分,它们仅供类内部使用。这就是为什么它们被宣布为私有的。受保护的属性已记录在案,因为如果您定义Exception.

胡说叔叔

string:Exception:private. 表示具有可见string性的Exception类属性。private与previous和相同trace。这三个属性仅在Exception类中可用。正如您所注意到的,protected属性之间没有类,因为它可以传递给子类。这句话也适用于public属性。
打开App,查看更多内容
随时随地看视频慕课网APP