php部分--面向对象三大特性-封装(另加连续调用的一个例子)、继承(重写、重载的例子)、多态;
一、封装性:
目的:为了使类更加安全。
做法:1设置私有成员
2在类中建方法,访问私有成员
3在方法里边加控制(if)
私有成员访问的两种方法:
方法一:set(可写) get(可读)做方法(可读可写)
- class Person
- {
- private $name;
- private $sex;
- private $age;//全部使用private进行封装
- function __construct($n,$s,$a)
- {
- $this->name=$n;
- $this->sex=$s;
- $this->age=$a;
- }
- //获取成员name的值
- function Getname()
- {
- return $this->name;
- }
- //设置性别,并加控制
- function Setsex($s)
- {
- if($s=="男"||$s=="女")//对输入加控制,只有输入合法字符,才能对私有成员赋值;
- {
- $this->sex=$s;
- }
- }
- //设置年龄,并加控制,防止输入非法字符
- function Setage($a)
- {
- if($a>18&&$a<80)
- {
- $this->age=$a;
- }
- }
- function say()
- {
- echo "我的名字是".$this->name.",性别:".$this->sex.",年龄:".$this->age;
- }
- }
- //通过构造函数给这个对象赋值
- $ren=new Person("张三","男","30");
- var_dump($ren);
- //获取对象的名字
- echo $ren->Getname();
- //改变对象的性别
- $ren->Setsex("女");
- var_dump($ren);
- //改变对象的年龄
- //1.给个非法,是改变不了的
- $ren->Setage(100);
- var_dump($ren);
- //2.输入合法
- $ren->Setage(50);
- var_dump($ren);
- //调用say()
- echo $ren->say();
方法二:用__SET(变量名,变量值) 、__GET(变量名) 魔术方法
- class Person
- {
- private $name;
- private $sex;
- private $age;//全部使用private进行封装
- function __construct($n,$s,$a)
- {
- $this->name=$n;
- $this->sex=$s;
- $this->age=$a;
- }
- function __get($aa)
- {
- if($aa=="sex")//如果获取的是性别,则返回“保密”、、注意这里是不带$符号的
- {
- return "保密";
- }
- else if($aa=="age")//如果获取的是年龄,年龄大于100时,减去10后再返回
- {
- if($this->age>100)
- {
- return $this->age-10;
- }
- else //年龄不大于100时,直接返回
- {
- return $this->age;
- }
- }
- else //如果获取的是姓名,则直接返回
- {
- return $this->name;
- }
- }
- function __set($n,$v)
- {
- if($n=="sex")
- {
- if(!$v=="男"||$v=="女")
- {
- return;
- }
- }
- else if("age")
- {
- if($v>150||$v<0)
- {
- return;
- }
- }
- else
- {
- $this->$n=$v;
- }
- }
- }
- $ren=new Person("张三","男",30);
- //__get()自动调用,可以直接获取。
- echo $ren->name."<br>";
- echo $ren->sex."<br>";
- echo $ren->age."<br>";
- //__set()自动调用
- //设置合法字符可以更改
- $ren->name="张四";
- $ren->age=50;
- $ren->sex="男";
- var_dump($ren);
- //设置非法字符不可以更改
- $ren->age=500;
- $ren->sex="123";
- var_dump($ren);
连续调用的一个例子,赋值之后,返回一个对象
- class Person
- {
- private $name;
- function say()
- {
- echo $this->name."说话";
- }
- function SetName($n)
- {
- $this->name = $n;
- return $this;//返回的是$ren->SetName("张三"),并把它看成一个对象。
- }
- }
- $ren = new Person();
- $ren->SetName("张三")->say();//$ren->SetName("张三")因为上面的return $this;返回了,并成为了一个对象
二、继承性:关键字(extends) 子类可以继承父类的一切,特点:单继承,一个子类只能有一个父类,一个父类可以有多个子类
//子类可以继承父类的一切
//重写:override
//特点:单继承,一个子类只能有一个父类,一个父类可以派生多个子类
继承例子:
- class person
- {
- var $name;
- var $sex;
- var $age;
- function __construct($a,$b,$c)
- {
- $this->name=$a;
- $this->sex=$b;
- $this->age=$c;
- }
- function say()
- {
- echo "我的名字是".$this->name,"性别".$this->sex,"年龄".$this->age;
- }
- function run()
- {
- echo $this->name."正在走路";
- }
- }
- class student extends person //student继承于person的成员变量和成员方法
- {
- var $school;
- function study()
- {
- echo $this->name."正在".$this->school."学习";
- }
- }
- class teacher extends student //teacher继承于student,由于student继承person,所以teacher也继承person的成员变量和成员方法
- { var $gongzi; function teaching() { echo $this->name."正在".$this->school."教学"; } }
- $teacher1=new teacher("李四","女",30);
- $teacher1->school="sdu+";
- $teacher1->gongzi=3000;
- $teacher1->say();
- $teacher1->study();
- $teacher1->teaching();
对父类方法的重写例子(即改变原来在父类中定义的量):强类型语言中用override
- class person
- {
- protected $name;
- protected $sex;
- protected $age;
- function __construct($a,$b,$c)
- {
- $this->name=$a;
- $this->sex=$b;
- $this->age=$c;
- }
- function say()
- {
- echo "我的名字是:".$this->name."性别".$this->sex."年龄".$this->age;
- }
- }
- class student extends person
- {
- private $school;
- //覆盖父类的构造方法,对成员变量进行重写
- function __construct($d,$e,$f,$g)
- {
- $this->name=$d;
- $this->sex=$e;
- $this->age=$f;
- $this->school=$g;
- }
- function study()
- {
- echo $this->name."正在".$this->school."学习";
- }
- function say()
- {
- echo "我的名字是".$this->name."性别:".$this->sex."年龄".$this->age."正在".$this->school."学习";
- }
- }
- $ren=new person("张三","男",30);
- var_dump($ren);
- $student=new student("李四","女",20,"胜利中学");
- var_dump($student);
- $student->say();
子类对父类进行重载的例子(即对父类中定义的量拿过来):php中用parent::方法名(). 强类型语言中用关键字 overload 重载
- class person
- {
- protected $name;
- protected $sex;
- protected $age;
- function __construct($a,$b,$c)
- {
- $this->name=$a;
- $this->sex=$b;
- $this->age=$c;
- }
- function say()
- {
- echo "我的名字是".$this->name."性别".$this->sex."年龄".$this->age;
- }
- }
- class student extends person
- {
- private $school;
- function __construct($d,$e,$f,$g) //引用过来父类的构造函数,并修改
- {
- parent::__construct($d,$e,$f,$g);
- $this->school=$g;
- }
- function study()
- {
- echo $this->name."正在".$this->school."学习";
- }
- function say()
- {
- parent::say(); //引用过来父类的say()方法,并在下面添加一段
- echo "在".$this->school."学校上学";
- }
- }
- $ren=new person("张三","男",40);
- var_dump($ren);
- $student1=new student("李四","女",20,"胜利中学");
- var_dump($student1);
- $student1->say();
重载可以使类里面的某个方法产生多种效果,根据传入的参数不同,可以执行不同的逻辑
重载也是多态的一种,编译多态
三、多态性:
当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同,称为多态
运行多态
条件
1.要有继承
2.父类引用指向子类实例
3.要有重写
4.调重写的方法
- 父类
- /* class Ren
- {
- public virtual string Say()
- {
- return "说话";
- }
- }
- //子类
- class China : Ren
- {
- public override string Say()
- {
- return "你好";
- }
- }
- //子类
- class America : Ren
- {
- public override string Say()
- {
- return "hello";
- }
- }
- //父类引用r指向子类实例
- Ren r = new America();
- MessageBox.Show(r.Say());
- r = new China();
- MessageBox.Show(r.Say());
- //子类的对象可以代替父类的对象
- America a = new America();
- MessageBox.Show(Eat(a));
- //怪兽吃人,需要一个人的参数
- public string Eat(Ren r)
- {
- return "这个人味道不错!";
- }
- */
php部分--面向对象三大特性-封装(另加连续调用的一个例子)、继承(重写、重载的例子)、多态;的更多相关文章
- [.net 面向对象编程基础] (11) 面向对象三大特性——封装
[.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...
- python 面向对象三大特性(封装 多态 继承)
今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...
- 深入理解Java面向对象三大特性 封装 继承 多态
1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...
- Python入门-面向对象三大特性-封装
一.封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容. 所以,在使用面向对象的封装特性时,需要: 将内容封装到某处 从某处调用被封装的内容 第一步:将内容封装到某处 sel ...
- 面向对象三大特性——封装(含property)
一.封装概念 封装是面向对象的特征之一,是对象和类概念的主要特性. 封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 二.隐藏属性 在p ...
- Python()- 面向对象三大特性----封装
封装: [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式.[好处] 1. 将变化隔离: 2. 便于使用:3. 提高复用性: 4. 提高安全性:[封装原则] 1. 将 ...
- Python面向对象三大特性(封装、继承、多态)
封装 类中把某些属性和方法隐藏起来,或者定义为私有,只在类的内部使用,在类的外部无法访问,或者留下少量的接口(函数)供外部访问:从上一篇文章中的私有属性与私有方法中的代码体现了该特性. class m ...
- JAVA基础——面向对象三大特性:封装、继承、多态
JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...
- C++面向对象三大特性
面向对象三大特性 继承 public protected private public继承 public protected 不可见 private继承 private private 不可见 pro ...
随机推荐
- SPOJ COT2 树上找路径上不同值的个数
题目大意 给出多个询问u , v , 求出u-v路径上点权值不同的个数 开始做的是COT1,用主席树写过了,理解起来不难 很高兴的跑去做第二道,完全跟普通数组区间求k个不同有很大区别,完全没思路 膜拜 ...
- Xcode6.2创建Empty Application
运行Xcode 6,创建一个Single View Application工程. 创建好后,把工程目录下的Main.storyboard和LaunchScreen.xib删除,扔进废纸篓. 打 ...
- struts2内Action方法调用
1.struts2流程: jsp页面-->web.xml-->struts.xml-->user.acrion-->UserAction.java 中的execute()--r ...
- HDFS权限问题
HDFS权限问题 Win下Eclipse提交hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denie ...
- Angularjs相关理论
1.AngularJS的工作流程: (1)浏览器载入HTML,然后把它解析成DOM (2)浏览器载入angularjs脚本 (3)AngularJS等到DOMContentLoaded事件触发 (4) ...
- Swift:网络库Alamofire
一,Alamofire的说明与配置 1,什么是Alamofire (1)Alamofire 的前身是 AFNetworking.AFNetworking 是 iOS 和 OS X 上很受欢迎的第三方H ...
- (工作经验总结一二)队列--多个main的原因
1,项目创建最好有一个自己的继承于UIViewController的类,并且其他控制器继承这个控制器,灵活性较大,例如: 要给项目每个页面添加截图或用户操作轨迹记录等,这样就省去了到每个页面添加的麻烦 ...
- 3、C#基础整理(语句概述)
语句 语句分为四个大类: * 分支语句:if,if... else,if ...else if... else,switch case * 循环语句:for,while,do while,foreac ...
- 11、SQL基础整理(变量)
变量 定义变量:declare @hello varchar(20) 赋值:set @hello = ‘你好’ select(结果框显示)/print(消息框显示) @hello *三行必须同时 ...
- Unity3D ShaderLab 使用贴图对模型的高光进行遮罩
Unity3D ShaderLab 使用贴图对模型的高光进行遮罩 前面研究了高光效果的实现,再说说现很多游戏用到的高光贴图技术,因为它可以让3D美工更容易控制最终的视觉效果. 这也就为我们提供了另外的 ...