我離開了原來的問題,但想指出我的問題的假設是有缺陷的。閱讀更多有沒有解決方法,PHP無法在寫入上下文中使用函數返回值?
我很驚訝地發現,這並不在PHP工作更新:
$someObjects = array();
function getInstance($key)
{
if (! $someObjects[$key])
$someObjects[$key] = new Object;
return $someObjects[$key];
}
getInstance('mykey')->property = 33;
最後一行創建了一個致命的錯誤:
PHP Fatal error: Can't use function return value in write context
這是一個我偶爾在Actionscript中使用的模式,當你需要顯式地定義一堆對象(比如在配置文件中)並且你想跳過實例化步驟也不想處理一堆嵌套數組的混亂。
有什麼建議嗎?
更新
這是閱讀的答覆後,這些咄的時刻之一。我的問題錯誤地認爲getInstance('mykey')->property = 33
是致命錯誤的根源。
我的示例代碼是草率的,而且有兩個大問題(哎呀):
- 沒有函數體
- 正確使用
! $array[$key]
代替empty($array[$key])
這些聲明global
問題也出現在我的項目代碼中,但它們似乎並不是導致致命錯誤的唯一原因,而且我自此更改了項目代碼,現在我無法弄清楚其他因素是什麼(?)。無論如何,我已經理順了。
低於此建議後,我的目標是爲語法:
class MetaInfo
{
public $title;
public $description;
}
/**
* @param $key string
* @return MetaInfo
*/
function getMeta($key)
{
global $meta;
if (empty($meta[$key]))
$meta[$key] = new MetaInfo;
return $meta[$key];
}
getMeta('path/to/page')->title = "Double-check your work before posting";
您的更新後,您可以從[這個例子]參見(http://3v4l.org/sZubA),這仍然工作在PHP> 5.0 – nickb