我保留了我原来的问题,但想指出我的问题的假设是有缺陷的。阅读更新了解更多
我惊讶地发现这在 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
是致命错误的根本原因。
我的示例代码很草率,并且有两个大问题(糟糕):
- 没有
global
在函数体中声明 - 错误地使用
! $array[$key]
而不是empty($array[$key])
这些问题也在我的项目代码中,但它们似乎不是致命错误的唯一原因,我已经更改了项目代码,现在我无法弄清楚其他因素是什么(?)。无论如何,我得到了理顺。
在下面的建议之后,这是我的目标语法:
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";