2010-11-14 105 views
9

可能重複:
What does $$ (dollar dollar or double dollar) mean in PHP?雙美元符號的PHP

我發現自己使用這種代碼在我的控制器之一:

foreach(get_object_vars($this->view) as $property=>$value){ 
    $$property = $value; 
} 

有沒有使用任何問題$$屬性將視圖屬性「本地化」爲簡單的$變量?

編輯:

我要補充一點,代碼視圖中的特定方法的範圍運行,所以沒有壓倒一切的局部變量的問題。這是爲了讓你們中的一些人指出重寫局部變量的問題。

+2

可能重複的[$$在PHP中的含義是什麼?](http://stackoverflow.com/questions/2715654/what-does-mean-in-php) – Charles 2012-01-21 19:22:31

回答

17

PHP中$$的問題是您創建了未知的變量名稱,可能會覆蓋您已經使用的變量名稱。這是微妙的編程錯誤的來源,通常不應該使用。

+0

謝謝,有道理。但是,如果我在視圖對象的上下文中使用它,唯一的屬性是視圖腳本要訪問的值,我仍然可以自由使用它。 – Slavic 2010-11-14 20:28:13

+4

我不同意這個答案。如果你在一個View對象中使用它,那麼你處於一個有限的範圍內。如果你總是在全局範圍內工作,那麼如果你使用的是MVC結構,那麼你就不會這樣做。如果你的視圖對象確實需要一些你不想重寫的'保留'變量,把它命名爲'$ _var',這樣你就不會意外地覆蓋它。 – 2010-11-14 20:52:55

+1

這就是爲什麼我寫「一般」。斯拉夫似乎知道他在做什麼。 – Erik 2010-11-14 21:28:27

1

不,這是做這件事的方法,也是唯一的方法,如果我沒有弄錯。雖然我的問題是問你爲什麼要這樣做,而不是使用對象變量。

+0

這是因爲我將值提供給視圖腳本,它以$ value的方式訪問更優雅的值,而不是$ this-> value時尚。 – Slavic 2010-11-14 20:23:09

5

那麼,你可以只使用extract()函數。此外,該片段:get_object_vars($this->view)表示您應該有一些數組來存儲這些變量,而不是一個對象。

+0

提取只適用於數組。我使用對象的原因是由於底層的代碼結構。我在使用get_object_vars()時看不到問題; – Slavic 2010-11-14 20:27:10

+0

也許你想跳過提取,所以沒有變量被覆蓋。 – NikiC 2010-11-14 20:28:08

-1

接受的答案是如此錯誤! 雙美元不是問題的原因,不應該被視爲這樣! 雙美元語法實際上是一個很好的PHP功能,可以在許多情況下有用!

如果您擔心您可能會使用它來覆蓋其他變量,那麼這意味着您編寫的代碼很差!無論如何,這個語法被更多有經驗的程序員使用,所以初學者應該避免它,直到更確定他們在做什麼。

某些情況下,這是通過變量基於其他變量,動態變量,無關變量的值循環真的很有用,等

再次,最後我說,雙美元是一個強大的功能並應該像這樣對待!擁有權利的同時也被賦予了重大的責任!

+2

功能強大,功能不強大,但從鏈接的問題來看,它似乎只是(簡單形式)'eval'的快捷方式。它做了什麼以外的事情? – greenoldman 2015-02-01 18:55:42