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 相关文章推荐
实现分十页分向前十页向后十页的处理
Oct 09 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
Apr 17 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
Apr 25 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
PHP文件后缀不强制为.php方法
Mar 31 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
PHP基本语法
Mar 31 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 随机生成10位字符代码
2009/03/26 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
详解vue高级特性
2020/06/09 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
深入理解Javascript中的this关键字
2015/03/27 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
如何理解python对象
2020/06/21 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
我的中国梦演讲稿400字
2014/08/19 职场文书
人工作失职检讨书
2015/05/05 职场文书
法人身份证明书
2015/06/18 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
Python图片检索之以图搜图
2021/05/31 Python
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android