我正在使用 PHP 和功能 get_object_vars()
我有两个班级
class A
{
var $color = 'blue';
var $wood = 'oak';
}
class B extends A
{
}
如果我们运行以下代码
$B = new B();
$B->website = 'stackoverflow';
var_dump(get_object_vars($B));
输出
array(3) {
["color"]=>
string(4) "blue"
["wood"]=>
string(3) "oak"
["website"]=>
string(13) "stackoverflow"
}
我的理想输出是
array(1) {
["website"]=>
string(13) "stackoverflow"
}
这可能吗?
答案 0 :(得分:1)
根据PHP get_object_vars documentation:“获取给定对象的可访问 非静态属性 根据范围 ”
在您的代码中,从对象范围外调用get_object_vars函数,因此,您将看到 public 属性。
如果范围是对象本身(来自类实例内部的调用),则私有,受保护或私有属性是可见的。 (静态属性除外)
因此,如果您需要在B类中继承$ color和$ wood,则可以将它们声明为 protected 。如果您不想继承,请将两个变量声明为私有
示例:
class A
{
protected $color = 'blue';
protected $wood = 'oak';
}
class B extends A{
public function __construct(){
echo "SCOPE: Self object: ";
var_dump("Color in B: " . $this->color);
var_dump("Wood in B: " . $this->wood);
}
public function get_my_vars(){
echo "SCOPE: Self object: ";
echo "My vars";
var_dump(get_object_vars($this));
}
}
$B = new B();
$B->website = 'stackoverflow';
echo "SCOPE: Outside object: B vars";
var_dump(get_object_vars($B));
$B->get_my_vars();
===============
Output:
SCOPE: Self object:
string 'Color in B: blue' (length=16)
string 'Wood in B: oak' (length=14)
SCOPE: Outside object: B vars
array (size=1)
'website' => string 'stackoverflow' (length=13)
SCOPE: Self object: My vars
array (size=3)
'color' => string 'blue' (length=4)
'wood' => string 'oak' (length=3)
'website' => string 'stackoverflow' (length=13)