先週、社内でPHPに関する質問メールを頂きました。
「MojaviのRequestクラスのsetAttributeメソッドとsetAttributeByRefメソッドの違いがわからない。」
というものです。
値渡しか参照渡しの違いですが、おれ自身、参照を本当に理解しているかあやしいもんです。本当に理解していないとわかりやすく説明することはできません。
概念を本当に理解したかどうかは言語化(コード化)、もしくは図にできるかどうかで判断することにしています。
「Prove it.(証明せよ)」ということでMojaviでのサンプルを作ってみました。
<?php
class DefaultIndexAction extends Action {
function execute(&$controller, &$request, &$user) {
$value = "foo";
$request->setAttribute("value", $value); // real
// $request->setAttributeByRef("value", $value); // ref
$value = "bar";
echo $request->getAttribute("value");
return VIEW_NONE;
}
}
?>
setAttributeとsetAttributeByRefで動作が変わる最小限サンプルです。
質問への回答はメールに返信してこのサンプルも一緒に送ったんですが、果たして解りやすい説明だったかどうか・・・自信がイマイチです。