php 如何打印对象的所有属性

iqjalb3h  于 2023-01-16  发布在  PHP
关注(0)|答案(7)|浏览(157)

我有一个未知的对象在php页面。
如何打印/回显它,以便查看它有哪些属性/值?
那么函数呢?有没有办法知道一个对象有什么函数呢?

juud5qan

juud5qan1#

由于还没有人提供反射API方法,下面是它的实现方式:

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
        )

)

使用Reflection的优点是可以按属性的可见性进行筛选,如下所示:

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

由于Person::$property是私有的,所以按照IS_PRIVATE过滤时返回:

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

)

看看文件!

q35jwt9p

q35jwt9p2#

var_dump($obj);

如果您想了解更多信息,可以使用ReflectionClass:
http://www.phpro.org/manual/language.oop5.reflection.html

ru9i0ody

ru9i0ody3#

要获取更多信息,请使用此自定义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的示例并用我们的函数 Package 它。

$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 ]
nuypyhwy

nuypyhwy4#

尝试使用Pretty Dump,它对我来说效果很好

zlhcx6iw

zlhcx6iw5#

要知道对象的属性,var_dump(object)是最好的方法。2它将显示所有与之相关的公共、私有和受保护的属性,而无需知道类名。
但是在方法的情况下,你需要知道类名,否则我认为很难得到对象的所有关联方法。

6qfn3psc

6qfn3psc6#

<?php
    echo "<textarea name='mydata'>\n";
    echo htmlspecialchars($data)."\n";
    echo "</textarea>";
?>
e1xvtsh3

e1xvtsh37#

<?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()〈--表示示例的名称

相关问题