php开发过程中关于继承的使用方法分享


Posted in PHP onJune 17, 2011

继承
通常需要这样一些类,这些类与其它现有的类拥有相同变量和函数。实际上,定义一个通用类用于所有的项目,并且不断丰富这个类以适应每个具体项目将是一个不 错的练习。为了使这一点变得更加容易,类可以从其它的类中扩展出来。扩展或派生出来的类拥有其基类(这称为“继承”,只不过没人死)的所有变量和函数,并 包含所有派生类中定义的部分。类中的元素不可能减少,就是说,不可以注销任何存在的函数或者变量。一个扩充类总是依赖一个单独的基类,也就是说,不支持多 继承。使用关键字“extends”来扩展一个类。

<?php 
class test { 
public function __construct() { 
} 
public function name() { 
$this->xname('John'); 
} 
private function showName($name) { 
echo 'my name in test is '.$name; 
} 
} 
class extendTest extends test { 
public function __construct() { 
parent::__construct(); 
} 
private function showName($name) { 
echo 'my name in extendTest is '.$name; 
} 
} 
$test = new extendTest(); 
$test->name(); 
?>

上述示例定义了名为 Named_Cart 的类,该类拥有 Cart 类的所有变量和函数,加上附加的变量 $owner 和一个附加函数 set_owner()。现在,以正常的方式创建了一个有名字的购物车,并且可以设置并取得该购物车的主人。而正常的购物车类的函数依旧可以在有名字的购 物车类中使用:
<?php
$ncart = new Named_Cart; // 新建一个有名字的购物车
$ncart->set_owner("kris"); // 给该购物车命名
print $ncart->owner; // 输出该购物车主人的名字
$ncart->add_item("10", 1); // (从购物车类中继承来的功能)
?>
这个也可以叫做“父-子”关系。创建一个类,父类,并使用 extends 来创建一个基于父类的新类:子类。甚至可以使用这个新的子类来创建另外一个基于这个子类的类。
Note:
类只有在定义后才可以使用!如果需要类 Named_Cart 继承类 Cart,必须首先定义 Cart 类。如果需要创建另一个基于 Named_Cart 类的 Yellow_named_cart 类,必须首先定义 Named_Cart 类。简捷的说:类定义的顺序是非常重要的。
class Person{ 
protected $name;//protected保护的权限,在子类可以访问,外部不能访问 
protected $age; 
protected $sex; 
function __construct($name,$age,$sex){ 
$this->name=$name;//当使用this时,就算name没有声明,也会再次声明一个 
$this->age=$age; 
$this->sex=$sex; 
echo "###############"; 
} 
public function say(){ 
echo "我的名字:{$this->name},我的年龄{$this->age}:,我的性别:{$this->sex}<br/>"; 
} 
protected function eat(){ 
echo "wwwwwwwwwwwwwwwwwwwww<br>"; 
} 
function run(){ 
} 
protected $name;//protected保护的权限,在子类可以访问,外部不能访问 
protected $age; 
protected $sex; 
} 
//继承 
class Student extends Person{ 
var $school; 
function __construct($name,$age,$sex,$school){ 
parent::__construct();//调用父类的构造方法 
$this->school=$school; 
} 
//重载say()方法,进行扩展 
protected function say(){//父类使用public,子类的权限不能低于父类,可以喝父类的权限相同 
//Person::say();//调用父类的say()方法 
parent::say();//调用父类say()方法,parent代表父类名,当父类名变化时也能够调用。 
echo "我所在的学校{$this->school}<br/>";//www.3ppt.com 
} 
function study(){ 
echo "{$this->name}在学习<br/>"; 
} 
} 
$s=new Student("zhangsan",23,"男"); 
$s->say(); 
$s->study();

* 1.面向对象的三大特性之一
*
* 2.开放性、可扩充性
*
* 3.增加代码的重用性
*
* 4.提高了软件的可维护性
*
* 5.继承就是用子类去“扩展”父类
*
* C++ 属于多继承,同一个类可以有多个父类
*
* PHP和JAVA属于单继承,同一个类只能有一个父类
*
* 不管是多继承或者单继承,都可以有多个子类
*
* 只要你在设计两个类时,有可以共享的成员,就将可以共享的内容单独作为一个基类使用
*
* 一、类继承的应用
*
* 1.声明一个子类,使用extends关键字去继承(扩展)一个父类
*
* 2.子类可以从父类中继承所有的内容,包括成员属性方法,构造方法......,在子类中都可以使用
*
* 二、访问类型控制
*
* 虽然子类可以从父类中继承所有内容,但私有的private成员,只能在本类中使用,子类中也不能使用
*
* 封装时,既可以让自己类的内部可以访问,也让子类可以用,但类的外部不能使用,只要将权限设置为protected
*
*
*
* 三、子类中重载父类的方法
*
* 1.子类可以声明可以声明和父类相同的方法名,即子类覆盖了父类同名的方法
*
* 2.子类的方法对父类方法的扩展
*
* 3.在子类中调用父类中被覆盖的方法
* 使用 父类名::方法名() parent::方法名()
*
* 4.在子类中编写构造方法,如果父类中也有构造方法,一定要去调用一次父类中被覆盖的构造方法
*
* 注意:子类中重载的方法,不能低于父类中访问权限(子类可以放大权限,但不能缩小权限)
PHP 相关文章推荐
php对gzip文件或者字符串解压实例参考
Jul 25 PHP
定义php常量的详解
Jun 09 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
php数组冒泡排序算法实例
May 06 PHP
php实现微信扫码支付
Mar 26 PHP
PHP jQuery+Ajax结合写批量删除功能
May 19 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
php设计模式  Command(命令模式)
Jun 17 #PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 #PHP
php smarty 二级分类代码和模版循环例子
Jun 16 #PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 #PHP
php中session_unset与session_destroy的区别分析
Jun 16 #PHP
不重新编译PHP为php增加openssl模块的方法
Jun 14 #PHP
php的memcached客户端memcached
Jun 14 #PHP
You might like
php列出一个目录下的所有文件的代码
2012/10/09 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
vue中使用sessionStorage记住密码功能
2018/07/24 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
Python中的变量和作用域详解
2016/07/13 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python把一个字符串切开的实例方法
2020/09/27 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
习总书记三严三实学习心得体会
2014/10/13 职场文书
思想作风建设心得体会
2014/10/22 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
锅炉工岗位职责
2015/02/13 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
六年级作文之家庭作文
2019/12/12 职场文书