保護されたプライベートプロパティを表示せずにオブジェクトをvar_dump()する関数や方法はありますか?
例:
class foo {
public $public = 'public';
protected $protected = 'protected';
private $private = 'private';
}
$Foo = new foo;
var_dump($Foo);
// Expected output "(string) public"
保護されたプライベートプロパティを表示せずにオブジェクトをvar_dump()する関数や方法はありますか?
例:
class foo {
public $public = 'public';
protected $protected = 'protected';
private $private = 'private';
}
$Foo = new foo;
var_dump($Foo);
// Expected output "(string) public"
json_encode
パブリックプロパティのみをエンコードします。
このページに示されているように、オブジェクトをループするだけです。
<?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() );
これが機能する理由は、オブジェクトの外部からオブジェクトにアクセスする場合、そのオブジェクトの公開されているメンバー変数にしかアクセスできないためです。
どうjson_decode(json_encode($obj))
ですか?
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出力を完全に制御できます。