4

保護されたプライベートプロパティを表示せずにオブジェクトをvar_dump()する関数や方法はありますか?

例:

class foo {
    public $public = 'public';
    protected $protected = 'protected';
    private $private = 'private';
}

$Foo = new foo;
var_dump($Foo);
// Expected output "(string) public"
4

4 に答える 4

7

json_encodeパブリックプロパティのみをエンコードします。

于 2012-09-06T20:27:51.463 に答える
3

このページに示されているように、オブジェクトをループするだけです。

<?php
    class person {
        public $FirstName = "Bill";
        public $MiddleName = "Terence";
        public $LastName = "Murphy";
        private $Password = "Poppy";
        public $Age = 29;
        public $HomeTown = "Edinburgh";
        public $FavouriteColour = "Purple";
    }

    $bill = new person();

    foreach($bill as $var => $value) {
        echo "$var is $value\n";
    }
?>

$ Password変数は、Privateとマークされており、グローバルスコープからアクセスしようとしているため、どこにも表示されないことに注意してください。

独自のvarダンプを作成する場合は、次のように実行できます。

function dumpObj( $obj )
{
    foreach( $obj as $k=>$v )
    {
        echo $k . ' : ' . $v ."\n";
    }
}

dumpObj( new WhateverClass() );

これが機能する理由は、オブジェクトの外部からオブジェクトにアクセスする場合、そのオブジェクトの公開されているメンバー変数にしかアクセスできないためです。

于 2012-09-06T20:24:13.807 に答える
0

どうjson_decode(json_encode($obj))ですか?

于 2015-01-07T03:44:21.997 に答える
0

1つのオプションは、クラスで__cloneメソッドを使用することです。そこで、オブジェクトインスタンスのクローンから不要なプロパティの設定を解除できます。例:

public function __clone() {
    unset( $this->my_secret_property ); 
}

次に、var_dumpはクローンを参照します。

var_dump( clone My_Object_Instance );

または、他の場所でクローンを作成する必要がある場合は、不要な配列要素の設定を解除した後、クラスで__debugInfo()メソッドを使用して、get_object_vars($ this)を返すなど、var_dump出力を完全に制御できます。

于 2018-03-17T16:39:41.017 に答える