gpt4 book ai didi

php - 如何使用 get_object_vars 获取属性的层次顺序?

转载 作者:可可西里 更新时间:2023-10-31 23:31:57 30 4
gpt4 key购买 nike

我有一些相互扩展的类,每次都添加更多属性。

现在我需要获取一个类的所有属性的列表,但是按照它们被声明的顺序,首先是父类的属性。

例如:

class foo {
public $a = 1;
public $c = 2;
public $d = 3;
}

class foo2 extends foo {
public $b = 4;
}

$test = new foo2;

var_dump(get_object_vars($test));

这给出了:

array(4) { ["b"]=> int(4) ["a"]=> int(1) ["c"]=> int(2) ["d"]=> int(3) } 

但我想要:

array(4) { ["a"]=> int(1) ["c"]=> int(2) ["d"]=> int(3) ["b"]=> int(4) } 

有什么办法可以实现吗?

更新:我需要这个的原因是因为我正在转换一个使用 STEP (EXPRESS ISO 10303-21) 格式的文件(并返回!)。 (有关更多信息,请参见:http://en.wikipedia.org/wiki/ISO_10303-21)这种格式是某种序列化对象结构。我在 PHP 中重新创建了所有对象类,但由于在 STEP 中属性的顺序至关重要,所以我需要完全相同的属性顺序。

最佳答案

Is there any way this could be achieved?

目前还不完全清楚您到底需要什么(以及您的动机是什么,如果知道给出具体建议会很好),但是使用 PHP Reflection 可以实现您正在寻找的东西。

您可以通过获取所有祖先类直到根类来实现,然后使用它读取所有这些类的所有属性。请参阅 ReflectionClass 类及其 ReflectionClass::getDefaultProperties() 方法。

也可以看看

希望这对您有所帮助,如果您遇到任何问题,请告诉我。

Example:

<?php

class root {
public $property = 1;
}

class parentClass extends root {
public $ads = FALSE;
}

class child extends parentClass {
public $child = TRUE;
}

$class = 'child';

$chain = array_reverse(class_parents($class), true) + [$class => $class];

$props = [];

foreach($chain as $class)
{
$props += (new ReflectionClass($class))->getDefaultProperties();
}

print_r($props);

程序输出:

Array
(
    [property] => 1
    [ads] => 
    [child] => 1
)

关于php - 如何使用 get_object_vars 获取属性的层次顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455562/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com