<?php
class base
{
public function getName(){
echo $this->name;
}
}
class son extends base
{
private $name = "son";
}
$son = new son();
$son->getName();
?>
代码很简单,我的理解是:子类继承了父类的getName函数,而且getName是public的 所以应该可以访问子类中的私有变量,但是为什么这段程序报了“不能访问私有变量”的错误?修改下程序,在父类中增加个私有的name变量
<?php
class base
{
private $name = "base";
public function getName(){
echo $this->name;
}
}
class son extends base
{
private $name = "son";
}
$son = new son();
$son->getName();
?> 程序没有报错,但是返回的是父类中的name的值,把子类的name变为public的也是一样,这里好像并不是调用子类继承过来的函数,而是调用了父类的函数,我记得之前学习JAVA的时候,根据OOP的多态性,此处调用的应该是子类的变量,所以这个过程很不理解,希望大家指点~~
class base
{
public function getName(){
echo $this->name;
}
}
class son extends base
{
private $name = "son";
}
$son = new son();
$son->getName();
?>
代码很简单,我的理解是:子类继承了父类的getName函数,而且getName是public的 所以应该可以访问子类中的私有变量,但是为什么这段程序报了“不能访问私有变量”的错误?修改下程序,在父类中增加个私有的name变量
<?php
class base
{
private $name = "base";
public function getName(){
echo $this->name;
}
}
class son extends base
{
private $name = "son";
}
$son = new son();
$son->getName();
?> 程序没有报错,但是返回的是父类中的name的值,把子类的name变为public的也是一样,这里好像并不是调用子类继承过来的函数,而是调用了父类的函数,我记得之前学习JAVA的时候,根据OOP的多态性,此处调用的应该是子类的变量,所以这个过程很不理解,希望大家指点~~
<?php
class base
{
private $name = "base";
public function getName(){
echo $this->name;
}
}
class son extends base
{
private $name = "son";
public function getName(){ //重载
echo $this->name;
}
$son = new son();
$son->getName();
?>
为什么还要重载呢?程序不是已经把这个函数继承过来了么?难道PHP的继承并不是真正有了这个函数,而是回调父类的函数?
所以父类的成员函数,无法访问$name.
{
public function getName(){
echo $this->name;
}
} 你单独一个父类实例的话,你的name变量在那里?这样的道理想不清楚吗?
2 getName方法,是父类的方法,父类的方法无法访问子类的私有成员变量.
这是规则.
不能想当然.
class base
{
protected $name = "base";
public function getName(){
echo $this->name;
}
}
class son extends base
{
function __construct() {
$this->name = "son";
}
}
这样就是把 父类的 $name 该覆盖了。.
就可以得到 子类中了。
1 private $name = "son";是私有的,只有类的成员函数能够访问.这也正是我迷惑的,son继承base后它应该有了getName()这个成员函数了吧?
你在程序下面加上
print_r(get_class_methods($son))
这行代码,可以打印出这个方法,是不是说明他其实是有这个方法的?
public function getName()
{
parent::getName();
}
所以你就知道为什么不能访问了.将private $name = "son"; 改成 protected $name='son';就可以访问了.
class base
{
private $name = "base";
public function getName(){
echo $this->name;
}
}
class son extends base
{
public $name = "son";
}
$son = new son();
$son->getName();我把代码改了下,现在son类的name为public的,但是函数还是返回了base类的name值,这又是为什么呢?我打印了下$this,显示的是object(son),所以$this-name应为"son"呀
但是根据现在程序的执行发现,其实他本身并没有拥有该成员方法,而是调用父类的成员方法,其实到这我也可以理解了,只是当子类调用父类成员方法的时候访问的仍然是父类的变量
class base
{
private $name = "base";
public function getName(){
echo $this->name;
}
}
class son extends base
{
public $name = "son";
}
$son = new son();
$son->getName();这就想不明白了