views:

53

answers:

1

Before I dive into the disscusion part a quick question; Is there a method to determine if a variable is a reference to another variable/object? (Just want to check I am passing references around correctly and not make duplicate versions of my objects). For example

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

I have been using PHP5 for a few years now (personal use only) and I would say I am moderately reversed on the topic of Object Orientated implementation. However the concept of Model View Controller Framework is fairly new to me.

I have looked a number of tutorials and looked at some of the open source frameworks (mainly CodeIgnitor) to get a better understanding how everything fits together. I am starting to appreciate the real benefits of using this type of structure.

I am used to implementing object referencing in the following technique.

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

I was surprised to see that CodeIgnitor and Yii pass referencs of objects and can be accessed via the following method:

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

The immediate advantage I can see is a lot less code and more user friendly. But I do wonder if it is more efficient as these frameworks are presumably optimised? Or simply to make the code more user friendly? Or some other advantage? This was an interesting article Do not use PHP references.

The reason I ask is I am attempting to put a framework together for a personal project and for the learning curve.

UPDATE

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

/* Ouput */
Goodbye World!

I am a little embarassed to say I was not expecting this to give this output. Certainly does make things a lot easier now.

+1  A: 

The & operator is the PHP4 way to pass objects by reference, PHP5 does this by default. Code that still uses this operator is ment to be backward compatible.

You can still use & to pass other datatypes by reference in PHP5, but the need for it is very rare and i suggest to avoid it.

elias