为什么“key()”函数在与对象而不是数组一起使用时不会触发警告或错误?

在处理数组时,使用array_keys()来获取数组的键是微不足道的。在处理对象时,我们还有其他函数,如get_object_vars()来处理这些。

因此,如果我们有两个简单的变量,一个数组和一个对象:

+--------------------+---------------------------+

|       Array        |          Object           |

+--------------------+---------------------------+

| $array = array(    | $object = new stdClass(); |

|   'foo'  => 'bar', |                           |

|   'john' => 'doe', | $object->foo  = 'bar';    |

|   'beep' => 'bop'  | $object->john = 'doe';    |

| );                 | $object->beep = 'bop';    |

+--------------------+---------------------------+

如果我们获取该函数并将其传递给数组,它将执行我们期望的操作,并给我们一个带有 、 和 的数组:array_keys()foojohnbeep


Return: array(3) {

  [0]=> string(3) "foo"

  [1]=> string(4) "john"

  [2]=> string(4) "beep"

}

当然,正如预期的那样,如果我们将对象传递给它,函数就会爆炸并且不知道该如何处理它(如果我们真的需要,我们可以转换甚至只是将其类型转换为数组):


Return: NULL

WARNING array_keys() expects parameter 1 to be array, object given

但是,如果我们一次处理一个密钥,它似乎会变得更有趣一些。使用PHP的key()函数,我们可以提取我们想要的任何密钥。


key($array); //returns: string(3) "foo"

key($object); //returns: string(3) "foo"


// If we move the internal pointer

end( $array ); // key($array) returns: string(4) "beep"

end( $object ); // key($object) returns: string(4) "beep"

查看 key() 函数的文档,如果使用了 ,这不应该引发警告吗?我问是因为我很好奇,最近被否决了,并被告知不要在物体上使用。通常我使用其他方法,但在某些情况下使用没有警告(或错误) - 所以我决定查看,文档没有说任何关于允许,只是。我想类似的事情可以说数组指针的功能像.objectkey()key()objectarray &$arrayend()


千巷猫影
浏览 89回答 1
1回答

偶然的你

来自: https://www.php.net/manual/en/language.types.array.php如果将对象转换为数组,则结果是一个数组,其元素是该对象的属性。键是成员变量名称,但有一些值得注意的例外:整数属性不可访问;私有变量在变量名称前面附加类名;受保护的变量在变量名称前面附加了“*”。这些预置值在两端都有空字节。这可能会导致一些意外行为因此,在某些情况下,依赖在转换中未发生突变的键应被视为不可靠。此外,根据给定的属性是否为 //,您可能无法获得预期的回报。publicprotectedprivatehttps://www.php.net/manual/en/function.get-object-vars.php#47075
打开App,查看更多内容
随时随地看视频慕课网APP