[OOP/PHP] access tot private member vanuit andere instance?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ik liep net tegen iets raars aan, wat me op zich wel aardig uitkwam, maar waarvan ik het toch maar erg vreemd vind dat het zo werkt. Blijkbaar heb ik van buitenaf toegang tot private members van een object, mits dat binnen een method van een object van dezelfde klasse is (of een afgeleide, mits de aangeroepen method van de superklasse is). Is dat normaal?
PHP:
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
<?
class A {
    private $a;
    private $value;
    
    public function setA() {
        $a = new A();
        $a->value = "foo";  // dit mag?!
        $this->a = $a;
    }
    
    public function getA() {
        return $this->a;
    }
    
    public function getValue() {
        return $this->value;
    }
}

class B {
    private $a;
    
    public function setA() {
        $a = new A();
        $a->value = "foo";  // dit mag niet.
        $this->a = $a;
    }
    
    public function getA() {
        return $this->a;
    }
    
    public function getValue() {
        return $this->value;
    }
}

$anA = new A();
$anA->setA();
echo $anA->getA()->getValue()."<br>";

$aB = new B();
$aB->setA();
echo $aB->getA()->getValue()."<br>";
?>

Ik zou verwachten private is private en dus afblijven, maar blijkbaar niet. Waarom is dit zo?

[ Voor 9% gewijzigd door Genoil op 04-11-2005 16:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Private is private voor de klasse. Dus andere klassen van hetzelfde type kunnen bij elkaars private variabele.

Ja, het mag dus

Acties:
  • 0 Henk 'm!

Verwijderd

In c# gebeurt dit ook in een vergelijkbare situatie, dus ik neem aan dat dit correct gedrag is.

[ Voor 18% gewijzigd door Verwijderd op 04-11-2005 19:51 ]


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Verwijderd schreef op vrijdag 04 november 2005 @ 19:30:
Private is private voor de klasse. Dus andere klassen van hetzelfde type kunnen bij elkaars private variabele.

Ja, het mag dus

Acties:
  • 0 Henk 'm!

Verwijderd

prototype schreef op vrijdag 04 november 2005 @ 19:54:
[...]
:P

[ Voor 11% gewijzigd door Verwijderd op 04-11-2005 20:22 ]


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Verwijderd schreef op vrijdag 04 november 2005 @ 19:30:
Private is private voor de klasse. Dus andere klassen van hetzelfde type kunnen bij elkaars private variabele.

Ja, het mag dus
Om het even helemaal OOP correct te zeggen:

Dus andere instanties van dezelfde klasse kunnen bij elkaars private members.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'

Pagina: 1