调用thrift接口不能var_dump对象输出到 STDOUT, 只能往数据库或者log文件输出。
function objDump($o) {
$s = "";
$reflect = new ReflectionObject($o);
$props = $reflect->getProperties();
foreach($props as $prop) {
$s .= sprintf("%s: %s\n", $prop->getName(), $prop->getValue($o));
}
return $s;
}
Demo:
* Person.php
<?php
class Person {
/** @var string */
public $name;
/** @var int */
public $age;
public function say() {
printf("%s is %d years old.", $this->name, $this->age);
}
public function __get($name) {
return $this->{$name};
}
public function __set($name, $value) {
$this->{$name} = $value;
}
}
* reflection.php
<?php
/**
* Created by PhpStorm.
* User: mingzhanghui
* Date: 3/13/2019
* Time: 17:07
*/
function __autoload($className) {
include $className.'.php';
}
$student = new Person();
$student->name = 'Tom';
$student->gender = 'Male';
$student->age = 24;
function objDump($o) {
$s = "";
$reflect = new ReflectionObject($o);
$props = $reflect->getProperties();
foreach($props as $prop) {
$s .= sprintf("%s: %s\n", $prop->getName(), $prop->getValue($o));
}
return $s;
}
echo objDump($student);
/*
foreach($reflect->getMethods() as $prop) {
printf("%s\n", $prop->getName());
}
*/
* run:
$ php7 reflection.php
name: Tom
age: 24
gender: Male
除了Reflection类 还有php 全局函数 get_object_vars 一样的效果
/**
* Gets the properties of the given object
* @link https://php.net/manual/en/function.get-object-vars.php
* @param object $object <p>
* An object instance.
* </p>
* @return array an associative array of defined object accessible non-static properties
* for the specified <i>object</i> in scope. If a property have
* not been assigned a value, it will be returned with a null value.
* @since 4.0
* @since 5.0
*/
function get_object_vars ($object) {}
* vars.php
<?php
$o = new stdClass();
$o->propA = '1';
$o->propB = [1,2,3];
$o->propC = 'test string';
// $assoc = get_object_vars($o);
// foreach ($assoc as $prop => $value) {
// printf("%s : %s\n", $prop, is_array($value) ? json_encode($value):$value);
// }
$reflect = new ReflectionObject($o);
foreach($reflect->getProperties() as $prop) {
$name = $prop->getName();
$value = $prop->getValue($o);
printf("%s : %s\n", $name, is_array($value) ? json_encode($value):$value);
}
$ php vars.php
propA : 1
propB : [1,2,3]
propC : test string