PHP-php 如何获取一个类中定义的所有属性?

PHP-php 如何获取一个类中定义的所有属性?

虐人心 发布于 2017-04-28 字数 136 浏览 1196 回复 5

如:

class test {
public $val1 = 1;
protected $val2 = 2;
private $val3 = 3;
}

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

泛泛之交 2017-10-13 5 楼

用反射吧,能拿到所有属性

<?php
class myclass {
public $val1 = 1;
protected $val2 = 2;
private $val3 = 3;
}

$foo = new myclass();

$reflect = new ReflectionClass($foo);
$pros = $reflect->getDefaultProperties();
var_dump($pros);
?>

浮生未歇 2017-08-23 4 楼

使用反射,这里补充一点:

$r = new ReflectionClass($this); 
$r->getConstants()  获取类中方法
$r->getProperties() 获取类中属性
$r->getMethods()    获取类中方法
晚风撩人 2017-08-20 3 楼

我来一种非常变态的写法,不用破坏原来的类:

class test {
public $val1 = 1;
protected $val2 = 2;
private $val3 = 3;
}

class testChild extends test
{
public function getFeilds()
{
$tt = new test();
$class_vars = get_class_vars(get_class($tt));
var_dump($class_vars);
}
}
testChild::getFeilds();

我们这边之前使用的一个框架就采用了类似的方法,结果产生了基类的private方法暴露的问题
这个不知道算不算是php的一个bug,反正在类似使用时要特别小心吧

瑾兮 2017-07-28 2 楼

外部只能拿到public的变量

 $my_class = new test();
get_class_vars(get_class($my_class));

补充一个全部获取的方法

 class test {
public $val1 = 1;
protected $val2 = 2;
private $val3 = 3;

public function getVar()
{
return get_class_vars(get_class($this));
}
}

$my_class = new test();
var_dump($my_class->getVar());

甜柠檬 2017-07-23 1 楼

 class test {
public $val1 = 1;
protected $val2 = 2;
private $val3 = 3;
}
$o = new test();
$a = (array) $o;
var_dump($a);
var_dump($a['val1']);
var_dump($a["*val2"]);
var_dump($a["testval3"]);