0

ディスカッションの部分に飛び込む前に、簡単な質問をします。変数が別の変数/オブジェクトへの参照であるかどうかを判断する方法はありますか?(参照を正しく渡していることを確認し、オブジェクトの重複バージョンを作成しないようにしたいだけです)。例えば

$foo = 'Hello World';
$bar = &$foo;
echo (is_reference($bar) ? 'Is reference' : 'Is orginal';

私は数年前からPHP5を使用しています(個人使用のみ)。オブジェクト指向の実装のトピックについては、適度に逆転していると思います。ただし、Model ViewControllerFrameworkの概念は私にとってはかなり新しいものです。

私はいくつかのチュートリアルを見て、いくつかのオープンソースフレームワーク(主にCodeIgnitor)を見て、すべてがどのように組み合わされているかをよりよく理解しました。このタイプの構造を使用することの本当の利点を理解し始めています。

私は次の手法でオブジェクト参照を実装することに慣れています。

class Foo{
    public $var = 'Hello World!';
}
class Bar{
    public function __construct(){
        global $Foo;
        echo $Foo->var;
    }
}
$Foo = new Foo;
$Bar = new Bar;

CodeIgnitorとYiiがオブジェクトの参照を渡し、次のメソッドを介してアクセスできることに驚きました。

$this->load->view('argument')

私が見ることができる直接の利点は、コードがはるかに少なく、よりユーザーフレンドリーであることです。しかし、これらのフレームワークはおそらく最適化されているので、より効率的かどうか疑問に思いますか?または、単にコードをよりユーザーフレンドリーにするためですか?または他の利点はありますか?これは興味深い記事でした。PHPリファレンスを使用しないでください

私が尋ねる理由は、私が個人的なプロジェクトと学習曲線のためにフレームワークをまとめようとしているからです。

アップデート

$Baz = $Foo;
$Baz->var = 'Goodbye World!';
echo $Foo->var;

/* Ouput */
Goodbye World!

私はこれがこの出力を与えることを期待していなかったと言うのは少し恥ずかしいです。確かに今は物事がずっと簡単になります。

4

1 に答える 1

1

&演算子は、参照によってオブジェクトを渡すPHP4の方法であり、PHP5はデフォルトでこれを行います。まだこの演算子を使用しているコードは、下位互換性があります。

&を使用してPHP5で参照により他のデータ型を渡すことはできますが、その必要性は非常にまれであり、避けることをお勧めします。

于 2010-04-18T01:00:01.323 に答える