亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么“key()”函數在與對象而不是數組一起使用時不會觸發警告或錯誤?

為什么“key()”函數在與對象而不是數組一起使用時不會觸發警告或錯誤?

PHP
千巷貓影 2022-09-17 21:34:02
在處理數組時,使用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()foojohnbeepReturn: array(3) {  [0]=> string(3) "foo"  [1]=> string(4) "john"  [2]=> string(4) "beep"}當然,正如預期的那樣,如果我們將對象傳遞給它,函數就會爆炸并且不知道該如何處理它(如果我們真的需要,我們可以轉換甚至只是將其類型轉換為數組):Return: NULLWARNING 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 pointerend( $array ); // key($array) returns: string(4) "beep"end( $object ); // key($object) returns: string(4) "beep"查看 key() 函數的文檔,如果使用了 ,這不應該引發警告嗎?我問是因為我很好奇,最近被否決了,并被告知不要在物體上使用。通常我使用其他方法,但在某些情況下使用沒有警告(或錯誤) - 所以我決定查看,文檔沒有說任何關于允許,只是。我想類似的事情可以說數組指針的功能像.objectkey()key()objectarray &$arrayend()
查看完整描述

1 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

來自: https://www.php.net/manual/en/language.types.array.php

如果將對象轉換為數組,則結果是一個數組,其元素是該對象的屬性。鍵是成員變量名稱,但有一些值得注意的例外:整數屬性不可訪問;私有變量在變量名稱前面附加類名;受保護的變量在變量名稱前面附加了“*”。這些預置值在兩端都有空字節。這可能會導致一些意外行為

因此,在某些情況下,依賴在轉換中未發生突變的鍵應被視為不可靠。


此外,根據給定的屬性是否為 //,您可能無法獲得預期的回報。publicprotectedprivate

https://www.php.net/manual/en/function.get-object-vars.php#47075


查看完整回答
反對 回復 2022-09-17
  • 1 回答
  • 0 關注
  • 100 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號