在对象集合上执行asort

时间:2018-05-24 16:02:58

标签: php arrays sorting object asort

想知道在对象集合上执行asort时,是否有人可以帮助了解PHP正在做什么。

采取以下片段:

class NameValuePair
{
    private $name;
    private $value;

    public function __construct($name, $value)
    {
         $this->name = $name;
         $this->value = $value;
    }

    public function getName() { return $this->name; }
    public function getValue() { return $this->value; }
}

$nameValuePairs = [
    new NameValuePair('f', 'f'),
    new NameValuePair('b', 'b'),
    new NameValuePair('z', 'z'),
    new NameValuePair('s', 's')
];

asort($nameValuePairs);

asort正在按$name个实例的NameValuePair属性对数组进行正确排序 - 生成的数组包含bfsz

顺序的对象

我已经实现了两个单元测试 - 我没想到asort正确地对集合进行排序,我总是使用usort来对对象数组进行排序。

请参阅此要点以获取完整背景和单元测试:https://gist.github.com/mgldev/91386cc6e3d65fc239de60dc1bc46114

一般思考

  • 无法在线查找有关PHP在执行asort时如何处理数组中对象的文档

  • 原本会认为默认行为是spl_object_hash和散列上的排序

  • 似乎使用NameValuePair实例的$ name属性排序,而不是$ value
  • PHP是否像get_object_vars()那样将对象作为数组获取然后对其进行排序? get_object_vars将在私有属性上返回一个空数组
  • PHP如何获取$ name属性?为什么选择$ name属性?
  • 这里还有别的什么吗?

有什么想法吗?

0 个答案:

没有答案