PHP - выводит все свойства объекта


У меня есть неизвестный объект на странице php.

Как я могу распечатать/воспроизвести его, чтобы я мог видеть, какие свойства/значения у него есть?

Как насчет функций? Есть ли какой-нибудь способ узнать, какими функциями обладает объект?

Author: stacker, 2010-06-14

7 answers

<?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_class()

 65
Author: Peter Ajtai, 2010-06-14 01:42:02

Поскольку никто еще не предоставил подход 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
        )

)

Прочитайте документы!

 8
Author: felipsmartins, 2015-05-22 06:20:16
var_dump($obj); 

Если вам нужна дополнительная информация, вы можете использовать класс отражения:

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

 5
Author: meder omuraliev, 2010-06-14 00:54:29

Мне очень нравится DBUG. Я обычно использую var_dump() для скаляров (int, строка, логическое значение и т.д.) и dBug для массивов и объектов.

Скриншот объекта с официального сайта:

 4
Author: Annika Backstrom, 2017-02-08 14:27:01

Для получения дополнительной информации используйте эту пользовательскую функцию ($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;
            }
        }

Теперь давайте создайте экземпляр человека и оберните его нашей функцией.

    $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
Author: DevWL, 2018-01-08 21:15:03

Попробуйте использовать Симпатичный дамп он отлично подходит для меня

 2
Author: Chrys Ugwu, 2016-07-02 22:44:08

Для знания свойств объекта лучше всего использовать var_dump(объект). Он покажет все публичные, частные и защищенные свойства, связанные с ним, не зная имени класса.

Но в случае методов вам нужно знать имя класса, иначе, я думаю, трудно получить все связанные методы объекта.

 1
Author: Dip, 2013-10-24 06:01:24