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 strtr() 函数使用说明
Nov 21 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
利用PHP实现短域名互转
Jul 05 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
php封装的mongodb操作类代码
Aug 06 PHP
laravel框架模型、视图与控制器简单操作示例
Oct 10 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
抓取YAHOO股票报价的类
2009/05/15 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
php警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
js实现移动端轮播图
2020/12/21 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
python写入已存在的excel数据实例
2018/05/03 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
2014全国两会心得体会
2014/03/17 职场文书
财产公证书样本
2014/04/04 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
导游词之峨眉山
2019/12/16 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS