Hi,
I'm playing with PHP5 and have some trouble wtith access control, here's the
code I run with last php5 from snaps.php.net under windows XP :
<?php
class pere {
private $var3;
public $var1;
protected $var2;
function __construct() {
$this->var1 = "public";
$this->var2 = "protected";
$this->var3 = "private";
}
function show() {
echo "pere::show() \n";
echo "var1 : $this->var1\n";
echo "var2 : $this->var2\n";
echo "var3 : $this->var3\n";
echo "\n";
}
}
class fils extends pere {
protected $var = "fils";
private $var4 = "test";
function __construct() {
parent::__construct();
}
function show_fils() {
echo "fils::show() \n";
echo "var1 : $this->var1\n";
echo "var2 : $this->var2\n";
echo "var3 : $this->var3\n";
echo "var : $this->var\n";
echo "\n";
}
}
function show_var($obj) {
$obj_vars = get_object_vars($obj);
foreach ($obj_vars as $name => $value) {
if($name != "") echo "$name : $value\n";
}
echo "\n";
}
$test1 = new pere();
$test1->show();
echo "Affichage des variables visibles de test1 :\n";
show_var($test1);
$test2 = new fils();
$test2->show_fils();
echo "Affichage des variables visibles de test2 :\n";
show_var($test2);
$test2->show();
echo "var3 : ".$test2->var3."\n";
echo "var4 : ".$test2->var4."\n";
?>
and I've the following result :
pere::show()
var1 : public
var2 : protected
var3 : private
Affichage des variables visibles de test1 :
var1 : public
fils::show()
var1 : public
var2 : protected
var3 : private
var : fils
Affichage des variables visibles de test2 :
var1 : public
var2 :
var3 : private
pere::show()
var1 : public
var2 : protected
var3 : private
var3 : private
Fatal error: Cannot access private property fils::$var4 in
D:\www\test\heritier.php on line 59
Normally in the instance of "fils" object ($test2), I mustn't see
$this->var3 which is private variable of the parent. if I comment the line
'echo "var3 : $this->var3\n";' in the show_fils method, $test2->var3 is
empty but do not generate an error !
The show_var($test2) function expose a var2 variable which normally must
send an Fatal error.
Fabrice Le Coz
[EMAIL PROTECTED]
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php