元の質問をそのまま残しましたが、私の質問の仮定に欠陥があることを指摘したかったのです。詳細についてはアップデートをお読みください
これが 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 で時折使用するパターンであり、一連のオブジェクトを明示的に (構成ファイルなどで) 定義する必要があり、インスタンス化のステップをスキップしたいが、オブジェクトを処理したくない場合に便利です。ネストされた配列の束の混乱。
助言がありますか?
アップデート
これは、回答を読んだ後の当たり前の瞬間の 1 つです。getInstance( 'mykey' )->property = 33
私の質問は、それが致命的なエラーの根本原因であると誤って想定しています。
私のコード例はずさんで、2 つの大きな問題がありました (おっと):
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";