property in functie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

15/03/2013 15:28:25
Quote Anchor link
Ola,

Als ik een class property toeken aan een variabele binnen een functie, is die variabele dan een verwijzing naar die property, of is het echt een kopie daarvan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Foo {

  private $bar;

  function
bar() {
    $bar = $this->bar;
    // voer code uit
  }

}

?>

In bovengenoemd voorbeeld... is in de method bar() de variabele $bar een verwijzing naar de class property $bar of is het een kopie daarvan?
 
PHP hulp

PHP hulp

28/11/2024 06:51:04
 
Wouter J

Wouter J

15/03/2013 15:58:45
Quote Anchor link
Dit werkt gewoon zoals met normale variabelen:

- De = operator werkt normaal 'by value'. De waarde van $this->bar wordt in dit geval dus overgenomen in $bar.
- De = operator met een object/class werkt 'by reference'. Beide variabele verwijzen dus naar hetzelfde object.
- Met =& operator kun je ipv een 'by value' een 'by reference' methode gebruiken voor elke type.
 
Ozzie PHP

Ozzie PHP

15/03/2013 16:06:48
Quote Anchor link
Ah oké, weer wat geleerd.
Dus als de propert $bar een class/object zou zijn, dan is de variabele $bar een referentie naar die class? Klopt dat?

En als ik dit zou doen:

$bar =& $this->bar;
$bar->foo();

is dat dan exact hetzelfde als dit?

$this->bar->foo();

Wanneer gebruik je eigenlijk =& ? In welke situaties?
 
Wouter J

Wouter J

15/03/2013 16:13:33
Quote Anchor link
Een simpel testje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
class A
{
    private $a;
    private $_isClass;

    public function __construct($a, $class = false)
    {

        $this->a = $a;
        $this->_isClass = $class;
    }


    public function __toString()
    {

        $a = $this->a;
        
        $this->performAction();

        return 'A{var} = '.$a.'<br>A{prop} = '.$this->a;
    }


    public function preformAction()
    {

        if ($this->_isClass) {
            $this->a->foo = 'bar';
        }
else {
            $this->a = 'bar';
        }
    }
}


$a = new A('foo');
echo $a;
/**
 * Outputs
 *
       A{var} = 'foo'
       A{prop} = 'bar'
 *
 */


$std = new \StdClass();
$std->foo = 'foo';
$a = new A($std, true);
echo $a;
/**
 * Outputs
 *
       A{var} = StdClass( foo = 'bar' )
       A{prop} = StdClass( foo = 'bar' )
 *
 */

?>


Als je regel 14 zou vervangen door $a =& $this->a krijg je ook bij strings een reference (dus de output wordt dan bij beide gelijk)
 
Ozzie PHP

Ozzie PHP

15/03/2013 16:23:27
Quote Anchor link
Hmmm, oké. Maar nu vraag ik me nog steeds af wanneer je =& in de praktijk zou moeten gebruiken? Ik ben het zover ik me kan herinneren nooit tegengekomen. Gebruik jij het zelf wel eens?
 
Wouter J

Wouter J

15/03/2013 16:27:20
Quote Anchor link
Nee :)
 
Ozzie PHP

Ozzie PHP

15/03/2013 16:28:50
Quote Anchor link
Ah oke... :-)

Nou ja, ben in ieder geval weer wat wijzer, thanks ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.