先週、社内でPHPに関する質問メールを頂きました。

「MojaviのRequestクラスのsetAttributeメソッドとsetAttributeByRefメソッドの違いがわからない。」

というものです。
値渡し参照渡しの違いですが、おれ自身、参照を本当に理解しているかあやしいもんです。本当に理解していないとわかりやすく説明することはできません。
概念を本当に理解したかどうかは言語化(コード化)、もしくは図にできるかどうかで判断することにしています。

Prove it.(証明せよ)」ということでMojaviでのサンプルを作ってみました。

ref-0.1.zip

<?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で動作が変わる最小限サンプルです。
質問への回答はメールに返信してこのサンプルも一緒に送ったんですが、果たして解りやすい説明だったかどうか・・・自信がイマイチです。

Comments


Option