PHP面向对象学习之parent::关键字
php  /  管理员 发布于 7年前   182
前言 最近在做THINKPHP开发项目中,用到了 parent:: 关键字,实际上 parent::关键字 是PHP中常要用到的一个功能,这不仅仅是在 THINKPHP 项目开发中,即使是一个小型的企业站点,也会有许多相同的function功能,我们可以封装成一个父类 class,然后多个子类直接继承公共部分父类。 PHP5中使用parent::来引用父类的方法。 parent:: 可用于调用父类中定义的成员方法。 parent::的追溯不仅于直接父类。 通过parent::调用父类方法 程序运行结果: 普通员工的工资是 4200 经理的工资是: 5700 父类的private属性 这个东西解释起来十分的不爽。 Private属性是不能被继承的,如果父类有私有的属性。那么父类的方法只为父类的私有属性服务。 下面的例子看起来很奇怪,在子类中重新定义了一个属性$sal,系统却返回了父类的属性。 程序运行结果: PHP 5.2.9 3000 parent's $sal 3000 如果父类中的属性被子类重写了。结果是这样的。注意 第5行的属性定义变成了protected。 程序运行结果: PHP 5.2.9 5000 parent's $sal 5000 子类中重写的方法对当前private有效。 程序运行结果: PHP 5.2.9 5000 parent's $sal 3000 打开zend调试状态看看,内存中的情况。注意最下面,有两个$sal 。分别是 3000 和 5000 。 程序运行结果: PHP 5.2.9 3000 将父类的属性$sal 改成 protected ,子类重写了父类的属性。在内存中只有一个 $sal 。 程序运行结果: PHP 5.2.9 5000 如果你学过java,你会觉得这一切都是很难理解的。 在Java中当子类被创建时,父类的属性和方法在内存中都被创建,甚至构造函数也要被调用。 PHP5不是这样,PHP5调用父类用的是parent:: 而不是 parent-> ,这足以说明PHP5不想在内存中让父类也被创建。PHP5想让继承变的比Java更简单。 适应下就好。 这样调用会让PHP5.1.1溢出。新版不知道有没有问题。 第12行改成这样就好了。注意比较。 这样的代码引起了递归操作,子类调用父类的方法,父类又调用子类方法。 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。 class employee{ protected $sal=3000; public function getSal(){ $this->sal = $this->sal + 1200; return $this->sal ; } } class Manager extends employee { //如果想让经理在员工工资的基础上多发1500元. //必须先调用父类的getSal()方法. public function getSal(){ parent::getSal();// 这里调用了父类的方法. $this->sal = $this->sal + 1500; return $this->sal ; } } $emp = new employee(); echo "普通员工的工资是 " . $emp->getSal(); echo "
"; //xiariboke.com $manager = new Manager(); echo "经理的工资是: " . $manager->getSal(); ?> 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(); //xiariboke.com ?> sal; } } class Manager extends employee { protected $sal=5000; //xiariboke.com public function getParentSal(){ //这里返回的是父类的private属性. return parent::getSal(); } } $manager = new Manager(); echo "PHP ".phpversion()."
"; echo $manager->getSal(); echo "
"; echo "parent's \$sal ".$manager->getParentSal(); ?> 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(); ?> sal; } } class Manager extends employee { protected $sal=5000; public function getParentSal(){ return $this->sal; } } $manager = new Manager(); echo "PHP ".phpversion()."
"; echo $manager->getSal(); ?> sal; } } class Manager extends employee { protected $sal=5000; public function getParentSal(){ return $this->sal; } } $manager = new Manager(); echo "PHP ".phpversion()."
"; echo $manager->getSal(); ?> sal; } } class Manager extends employee { protected $sal=5000; public function getSal(){ return parent::$this->getSal(); } } $manager = new Manager(); echo "PHP ".phpversion()."
"; echo $manager->getSal(); ?> return parent:: getSal();
return parent::$this->getSal();
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号