2017-02-14 149 views
0

只是我或者這種行爲在PHP中很奇怪。 比方說,例如,我們有這樣的功能:PHP - 對象的類型提示,與stdClass不一樣

function test(object $arg) 
{} 

如果我要調用此函數:

​​

對象(類型提示)將不會指stdClass的,並將導致即使在PHP中查看內置的settype()函數時,對象似乎是對stdClass的引用。即使鑄造到一個對象將導致一個stdClass,但由於某種原因,我不能使用settype($ foo,'stdClass')...

這是背後的原因嗎?

+0

和類型的對象不是一個字符串,(串) '喇嘛',(對象){任:1} –

+0

嘗試'功能測試(stdClass的$ ARG){}' –

回答

1

PHP中沒有總體對象類定義。即使您要創建一個名爲myClass的類併爲測試函數提供實例,該代碼也不起作用。類型轉換爲對象creates an instance of type stdClass

您必須使用function test(stdClass $arg)作爲函數定義。

+0

我知道它是如何工作的,我想知道爲什麼關鍵字對象甚至存在...當使用它作爲一種類型暗示它不引用stdClass,但是當轉換爲一個對象時,它會導致一個stdClass ...爲什麼不只是刪除關鍵字和轉換爲stdClass,並且如果他們想要保留它,爲什麼在沒有任何事情會匹配時允許它用作暗示類型? – Saruman

+0

因爲如果你願意,你可以創建一個名爲object的類。 PHP不會提前知道哪些類將被定義。 成爲一個stdClass的對象就是它的工作原理,例如你投到一個「對象」而不是一個字符串。 – mcq8

+0

更糟糕的是,這意味着「對象」意味着不同的事情取決於是否已經有一個名爲object的類。但謝謝你的答案 – Saruman