Hi List,

<?php
error_reporting(E_ALL);

class aaa {
    protected $_parent = null;
    private $_value = 0;

    public function setValue($value) {
        $this->_value = $value;    
    }
    
    public function getValue) {
        return $this->_value;    
    }
    
    public function setParent( $oParent ) {
        $this->_parent = $oParent;
    }

    public function showParentValue() {
        return $this->_parent->_value;
    }
}

$aa = new aaa();
$aa->setValue(500);

$bb = new aaa();
$bb->setParent($aa);

echo $bb->showParentValue() . PHP_EOL;

?>

The code above shows me a feature thats bypass my class design. :)
With this code it is possible to access the private class property _value
from $aa.
Output: 500

If i us a other class like :

class cc 
{
    private $_value = 'foo';
}

$aa = new cc();

$bb = new aaa();
$bb->setParent($aa);
echo $bb->showParentValue() . PHP_EOL;

i get an error that tells me cc:$_value is private and could not be
accessed.
Thats ok.

But with this change i cant overload or change my property in any way.

class cc extends aaa
{
    private $_value = 'foo';
}

$aa = new cc();

$bb = new aaa();
$bb->setParent($aa);
echo $bb->showParentValue() . PHP_EOL;
echo $aa->getValue() . PHP_EOL;

the output is:
0
0

Thats a bit strange to me because i expected a different behavior.

Conclusion:
1. Why i can access a private property from a different class instance
(name) but same type ?
$aa and $bb are instances of aaa but not the same.
2. This doesnt works if cc is a own class with same property name (ie.
interface or something like this)
3. Is it a bug that i can't use same property name in my child class?
(normaly the parent property isnt visible to the child)
cc extends aaa. 

Thats just some questions :)

-- Marco

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to