class employee{

private $sal=3000;

//protected $sal=3000;

public function getSal(){

return $this->sal;

}

}

class Manager extends employee {

protected $sal=5000;

public function getParentSal(){

//这里返回的是父类的private属性.

return parent::getSal();

}

}

$manager = new Manager();

echo "PHP ".phpversion()."

";

echo $manager->getSal();

echo "

";

echo "parent's \$sal ".$manager->getParentSal();

?>

程序运行结果:

PHP 5.3.8

3000

parent's $sal 3000

如果父类中的属性被子类重写了。

结果是这样的。注意 第5行的属性定义变成了protected。class employee{

//private $sal=3000;

protected $sal=3000;

public function getSal(){

return $this->sal;

}

}

class Manager extends employee {

protected $sal=5000;

public function getParentSal(){

//这里返回的是父类的private属性.

return parent::getSal();

}

}

$manager = new Manager();

echo "PHP ".phpversion()."

";

echo $manager->getSal();

echo "

";

echo "parent's \$sal ".$manager->getParentSal();

?>

程序运行结果:

PHP 5.3.8

5000

parent's $sal 5000

第一个列子中 父类的private $sal没有被重写 所以$manager->getSal()这个父类的方法 调用的是父类自己的私有属性$sal 此时内存中有两个$sal

第二个列子中 父类的protected $sal被重写 $manager->getSal()这个父类的方法 调用已经被重写的$sal 父类的$sal在内存中是不存在的 此时内存中只有一个$sal

接下来看第三个列子

子类中重写的方法对当前private有效。class employee{

private $sal=3000;

public function getSal(){

return $this->sal;

}

}

class Manager extends employee {

private $sal=5000;

//重写过的方法

public function getSal(){

return $this->sal;

}

public function getParentSal(){

//这里返回的是父类的private属性.

return parent::getSal();

}

}

$manager = new Manager();

echo "PHP ".phpversion()."

";

echo $manager->getSal();

echo "

";

echo "parent's \$sal ".$manager->getParentSal();

?>

运行结果

PHP 5.3.8

5000

parent's $sal 3000

这个列子中子类重写getSal()方法 所以他调用的是子类的属性

如果你注释子类的这一行

//private $sal=5000;

你会发现一个错误:Notice: Undefined property: Manager::$sal in E:\wamp\www\oo\2-5\2-5-3.php on line 14

如果注释掉12行的子类重写方法 那么echo $manager->getSal();得到的结果是 父类的私有属性$sal 3000

打开zend调试状态看看,内存中的情况。注意最下面,有两个$sal 。分别是 3000 和 5000 。class employee{

private $sal=3000;

public function getSal(){

return $this->sal;

}

}

class Manager extends employee {

protected $sal=5000;

public function getParentSal(){

return $this->sal;

}

}

$manager = new Manager();

echo "PHP ".phpversion()."

";

echo $manager->getSal();

?>

程序运行结果:

PHP 5.3.8

3000

将父类的属性$sal 改成 protected ,子类重写了父类的属性。在内存中只有一个 $sal 。class employee{

protected $sal=3000;

public function getSal(){

return $this->sal;

}

}

class Manager extends employee {

protected $sal=5000;

public function getParentSal(){

return $this->sal;

}

}

$manager = new Manager();

echo "PHP ".phpversion()."

";

echo $manager->getSal();

?>

程序运行结果:

PHP 5.3.8

5000

注意:

PHP5调用父类用的是parent:: 而不是 parent-> ,这足以说明PHP5不想在内存中让父类也被创建。

PHP5想让继承变的比Java更简单。

php 类 private,有关php类的private属性继承问题详解相关推荐

  1. 中科大-计算机类考研真题(初试笔试真题详解+复试笔试机试真题详解+面试问题汇总分析)

    中科大-计算机类考研真题(初试笔试真题详解+复试笔试机试真题详解+面试问题汇总分析) 初试笔试真题2003年~2019年:答案+详解 复试面试问题总结:问题汇总+详解分析 复试面试经验总结:个人小结 ...

  2. 实现了某一个接口的匿名类的例子_java中的内部类内部接口详解,一文搞定

    简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口. ...

  3. Java中四个访问修饰符public private protected 和默认(package-private)的用法详解

    访问级别 访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法.有两个级别的访问控制: 1.在顶级 public或package-private(没有显式修饰符即默认权限). 类可以用修饰符pu ...

  4. java里类得继承详细讲解_java中类的继承详解。

    前言 继承是面向对象的三大特征之一. 也是实现软件复用的重要手段. Java继承具有单继承的特点, 每个子类只有一个直接父类. 继承的特点 Java的继承通过extends关键字实现. 实现继承的类被 ...

  5. python3类的继承详解_基于python3 类的属性、方法、封装、继承详解

    下面小编就为大家带来一篇基于python3 类的属性.方法.封装.继承实例讲解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Python 类 Python中的类提供了 ...

  6. python的类和对象_Python面向对象之类和对象实例详解

    本文实例讲述了Python面向对象之类和对象.分享给大家供大家参考,具体如下: 类和对象(1) 对象是什么? 对象=属性(静态)+方法(动态): 属性一般是一个个变量:方法是一个个函数: #类的属性 ...

  7. Java类中this关键字和static关键字的用法详解

    今天给大家总结介绍一下Java类中this关键字和static关键字的用法. 文章目录 this关键字用法: 1:修饰属性,表示调用类中的成员变量 2:this修饰方法 3:this表示当前对象的引用 ...

  8. 类中的向上转型与向下转型详解

    我们的类与类之间会存在继承关系,子类继承父类,一个父类可以有多个子类,例如Animal类就可以有Cat子类,Dog子类,等等.那么我们在运用的时候根据不同的场景会出现向上转型和向下转型的情况. 一.向 ...

  9. php的persion是,php创建Persion类,反射过程,反射后使用流程详解

    1. 介绍 -- PHP5添加了一项新的功能:Reflection.这个功能使得phper可以reverse-engineer class, interface,function,method and ...

最新文章

  1. 简单好用的PHP无限分类
  2. 纽瓦克市政厅电脑遭勒索软件劫持,部分公共服务被迫瘫痪
  3. 循环神经网络(RNN)相关知识
  4. zabbix利用SNMPTrap接收交换机主动告警
  5. 技术者利用wordpress+阿里云服务器+LAMP新搭建的博客网站:www.youngxy.top
  6. 【视频】利用IDEA 创建 spring mvc项目
  7. 谈谈我们的学习和我们的Blog
  8. [基础知识]在PeopleSoft中SMTP设置不生效如何查找问题
  9. Java设计模式之七大设计原则
  10. IDEA整合SSM框架 applicationcontext in module file is included in 5 contexts
  11. 淘宝网视频下载的方法
  12. 索尼NW-A55日版改中文
  13. Matlab中_pkg.exe,pkg文件该如何打开?轻松打开pkg文件的方法
  14. 解决Unity TextMeshPro 不能显示中文问题
  15. [每日一氵] python string format按照索引ID失效
  16. 解决:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x81 in position 18: illegal multibyte sequence
  17. python + Selenium 实现自动化查询问财数据及下载Excel数据并存入到mysql
  18. A - Artwork ( 并查集 )
  19. 计算机中函数vlookup怎么用,教您使用excel函数vlookup
  20. 初识C语言系列-5-完结篇-#define,指针,结构体

热门文章

  1. mysql查询语句有点难_Mysql惯用函数,难点,注意_mysql
  2. Python:Python全球生态主站,pip安装方法、集成安装方法、文件安装方法、第三方库自动安装脚本
  3. windows10下anaconda安装、tensorflow安装以及pythonchar配置的使用
  4. 怎么看电脑配置高不高_辣椒产量高不高?关键看播种前的种子处理,你知道怎么做吗?...
  5. hikvision v2.3控件网页demo_网页禁止复制粘贴怎么解决?教你五招轻松搞定
  6. 计算机操作系统教程讲解视频,计算机操作系统(54集)全套教学视频
  7. c语言学习-使用指针对三个变量互相赋值
  8. oracle+rownum(),Oracle rownum和row_number()
  9. 构建完整的微服务(三)
  10. 使用动态SQL获取具有非空字段的自定义表结构