web-dev-qa-db-ja.com

PHP-オブジェクトのすべてのプロパティを出力

PHPページに不明なオブジェクトがあります。

どうすれば印刷/エコーできるので、どのようなプロパティ/値があるのか​​を確認できますか?

関数はどうですか?オブジェクトが持っている機能を知る方法はありますか?

57
stacker
<?php var_dump(obj) ?>

または

<?php print_r(obj) ?>

これらは、配列にも使用するものと同じです。

これらは、PHP 5.のオブジェクトの保護されたプライベートプロパティを表示します。

メンバーメソッドを知りたい場合は、 get_class_methods() を使用できます。

$class_methods = get_class_methods('myclass');
// or
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name) 
{
    echo "$method_name<br/>";
}

関連するもの:

get_object_vars()

get_class_vars()

get_class() <-インスタンスの名前

81
Peter Ajtai

誰もOOアプローチを提供していないので、まだここで行われているようなものです。

class Person {
    public $name = 'Alex Super Tramp';

    public $age = 100;

    private $property = 'property';
}


$r = new ReflectionClass(new Person);
print_r($r->getProperties());

//Outputs
Array
(
    [0] => ReflectionProperty Object
        (
            [name] => name
            [class] => Person
        )

    [1] => ReflectionProperty Object
        (
            [name] => age
            [class] => Person
        )

    [2] => ReflectionProperty Object
        (
            [name] => property
            [class] => Person
        )

)

リフレクションを使用する場合の利点は、次のようにプロパティの可視性でフィルタリングできることです。

print_r($r->getProperties(ReflectionProperty::IS_PRIVATE));

Person :: $ propertyはプライベートなので、IS_PRIVATEでフィルタリングすると返されます:

//Outputs
Array
(
    [0] => ReflectionProperty Object
        (
            [name] => property
            [class] => Person
        )

)

ドキュメントを読む!

11
felipsmartins
var_dump($obj); 

さらに情報が必要な場合は、ReflectionClassを使用できます。

http://www.phpro.org/manual/language.oop5.reflection.html

5
meder omuraliev

dBug が本当に好きです。通常、スカラー(int、string、booleanなど)にはvar_dump()を使用し、配列およびオブジェクトにはdBugを使用します。

公式サイトのオブジェクトスクリーンショット:

alt text

4

詳細情報を取得するには、このカスタムTO($ someObject)関数を使用します。

特定のオブジェクトのメソッドを表示するだけでなく、そのプロパティ、カプセル化、リリースノートなどの有用な情報を表示するこの単純な関数を作成しました。

function TO($object){ //Test Object
                if(!is_object($object)){
                    throw new Exception("This is not a Object"); 
                    return;
                }
                if(class_exists(get_class($object), true)) echo "<pre>CLASS NAME = ".get_class($object);
                $reflection = new ReflectionClass(get_class($object));
                echo "<br />";
                echo $reflection->getDocComment();

                echo "<br />";

                $metody = $reflection->getMethods();
                foreach($metody as $key => $value){
                    echo "<br />". $value;
                }

                echo "<br />";

                $vars = $reflection->getProperties();
                foreach($vars as $key => $value){
                    echo "<br />". $value;
                }
                echo "</pre>";
            }

どのように機能するかを示すために、ランダムなサンプルクラスを作成します。 Personというクラスを作成し、クラス宣言のすぐ上にいくつかのリリースノートを配置します。

        /**
         * DocNotes -  This is description of this class if given else it will display false
         */
        class Person{
            private $name;
            private $dob;
            private $height;
            private $weight;
            private static $num;

            function __construct($dbo, $height, $weight, $name) {
                $this->dob = $dbo;
                $this->height = (integer)$height;
                $this->weight = (integer)$weight;
                $this->name = $name;
                self::$num++;

            }
            public function eat($var="", $sar=""){
                echo $var;
            }
            public function potrzeba($var =""){
                return $var;
            }
        }

次に、Personのインスタンスを作成し、それを関数でラップします。

    $Wictor = new Person("27.04.1987", 170, 70, "Wictor");
    TO($Wictor);

これにより、カプセル化情報やパラメーターの数、各メソッドのパラメーターの名前、メソッドの場所、存在するコード行など、クラス名、パラメーター、メソッドに関する情報が出力されます。以下の出力を参照してください。

CLASS NAME = Person
/**
             * DocNotes -  This is description of this class if given else it will display false
             */

Method [  public method __construct ] {
  @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 75 - 82

  - Parameters [4] {
    Parameter #0 [  $dbo ]
    Parameter #1 [  $height ]
    Parameter #2 [  $weight ]
    Parameter #3 [  $name ]
  }
}

Method [  public method eat ] {
  @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 83 - 85

  - Parameters [2] {
    Parameter #0 [  $var = '' ]
    Parameter #1 [  $sar = '' ]
  }
}

Method [  public method potrzeba ] {
  @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 86 - 88

  - Parameters [1] {
    Parameter #0 [  $var = '' ]
  }
}


Property [  private $name ]

Property [  private $dob ]

Property [  private $height ]

Property [  private $weight ]

Property [ private static $num ]

それがあなたの役に立つことを願っています。よろしく。

3
DevWL

Pretty Dump を使用してみてください

2
Ghostff

オブジェクトのプロパティを知るには、var_dump(object)が最善の方法です。クラス名を知らなくても、それに関連付けられているすべてのパブリック、プライベート、および保護されたプロパティが表示されます。

しかし、メソッドの場合は、クラス名を知る必要があります。他の場合、オブジェクトのすべての関連メソッドを取得するのは難しいと思います。

1
Dip