一、封装性:

目的:为了使类更加安全。

做法:1设置私有成员

2在类中建方法,访问私有成员

3在方法里边加控制(if)


私有成员访问的两种方法:

方法一:set(可写) get(可读)做方法(可读可写)

  1. class Person
  2. {
  3. private $name;
  4. private $sex;
  5. private $age;//全部使用private进行封装
  6. function __construct($n,$s,$a)
  7. {
  8. $this->name=$n;
  9. $this->sex=$s;
  10. $this->age=$a;
  11. }
  12. //获取成员name的值
  13. function Getname()
  14. {
  15. return $this->name;
  16. }
  17. //设置性别,并加控制
  18. function Setsex($s)
  19. {
  20. if($s=="男"||$s=="女")//对输入加控制,只有输入合法字符,才能对私有成员赋值;
  21. {
  22. $this->sex=$s;
  23. }
  24. }
  25. //设置年龄,并加控制,防止输入非法字符
  26. function Setage($a)
  27. {
  28. if($a>18&&$a<80)
  29. {
  30. $this->age=$a;
  31. }
  32. }
  33. function say()
  34. {
  35. echo "我的名字是".$this->name.",性别:".$this->sex.",年龄:".$this->age;
  36. }
  37. }
  1.  
  1. //通过构造函数给这个对象赋值
  1. $ren=new Person("张三","男","30");
  2. var_dump($ren);

  1. //获取对象的名字
  2. echo $ren->Getname();

  1. //改变对象的性别
  2. $ren->Setsex("女");
  3. var_dump($ren);

  1. //改变对象的年龄
  2. //1.给个非法,是改变不了的
  3. $ren->Setage(100);
  4. var_dump($ren);

  1. //2.输入合法
  2. $ren->Setage(50);
  3. var_dump($ren);

  1. //调用say()
  2. echo $ren->say();

方法二:用__SET(变量名,变量值) 、__GET(变量名) 魔术方法

  1. class Person
  2. {
  3. private $name;
  4. private $sex;
  5. private $age;//全部使用private进行封装
  6. function __construct($n,$s,$a)
  7. {
  8. $this->name=$n;
  9. $this->sex=$s;
  10. $this->age=$a;
  11. }
  12. function __get($aa)
  13. {
  14. if($aa=="sex")//如果获取的是性别,则返回“保密”、、注意这里是不带$符号的
  15. {
  16. return "保密";
  17. }
  18. else if($aa=="age")//如果获取的是年龄,年龄大于100时,减去10后再返回
  19. {
  20. if($this->age>100)
  21. {
  22. return $this->age-10;
  23. }
  24. else //年龄不大于100时,直接返回
  25. {
  26. return $this->age;
  27. }
  28. }
  29. else //如果获取的是姓名,则直接返回
  30. {
  31. return $this->name;
  32. }
  33. }
  34. function __set($n,$v)
  35. {
  36. if($n=="sex")
  37. {
  38. if(!$v=="男"||$v=="女")
  39. {
  40. return;
  41. }
  42. }
  43. else if("age")
  44. {
  45. if($v>150||$v<0)
  46. {
  47. return;
  48. }
  49. }
  50. else
  51. {
  52. $this->$n=$v;
  53. }
  54. }
  55. }
  1. $ren=new Person("张三","男",30);
  1. //__get()自动调用,可以直接获取。
  2. echo $ren->name."<br>";
  3. echo $ren->sex."<br>";
  4. echo $ren->age."<br>";

  1. //__set()自动调用
  2. //设置合法字符可以更改
  3. $ren->name="张四";
  4. $ren->age=50;
  5. $ren->sex="男";
  6. var_dump($ren);

  1. //设置非法字符不可以更改
  2. $ren->age=500;
  3. $ren->sex="123";
  4. var_dump($ren);

连续调用的一个例子,赋值之后,返回一个对象

  1. class Person
  2. {
  3. private $name;
  4.  
  5. function say()
  6. {
  7. echo $this->name."说话";
  8. }
  9.  
  10. function SetName($n)
  11. {
  12. $this->name = $n;
  13. return $this;//返回的是$ren->SetName("张三"),并把它看成一个对象。
  14. }
  15.  
  16. }
  17.  
  18. $ren = new Person();
  19. $ren->SetName("张三")->say();//$ren->SetName("张三")因为上面的return $this;返回了,并成为了一个对象

二、继承性:关键字(extends)    子类可以继承父类的一切,特点:单继承,一个子类只能有一个父类,一个父类可以有多个子类

//子类可以继承父类的一切
//重写:override
//特点:单继承,一个子类只能有一个父类,一个父类可以派生多个子类

继承例子:

  1. class person
  2. {
  3. var $name;
  4. var $sex;
  5. var $age;
  6. function __construct($a,$b,$c)
  7. {
  8. $this->name=$a;
  9. $this->sex=$b;
  10. $this->age=$c;
  11. }
  12. function say()
  13. {
  14. echo "我的名字是".$this->name,"性别".$this->sex,"年龄".$this->age;
  15. }
  16. function run()
  17. {
  18. echo $this->name."正在走路";
  19. }
  20. }
  21.  
  22. class student extends person //student继承于person的成员变量和成员方法
  23. {
  24. var $school;
  25. function study()
  26. {
  27. echo $this->name."正在".$this->school."学习";
  28. }
  29.  
  30. }
  31. class teacher extends student //teacher继承于student,由于student继承person,所以teacher也继承person的成员变量和成员方法
  1. { var $gongzi; function teaching() { echo $this->name."正在".$this->school."教学"; } }
  1. $teacher1=new teacher("李四","女",30);
  2. $teacher1->school="sdu+";
  3. $teacher1->gongzi=3000;
  4.  
  5. $teacher1->say();
  6. $teacher1->study();
  7. $teacher1->teaching();

对父类方法的重写例子(即改变原来在父类中定义的量):强类型语言中用override

  1. class person
  2. {
  3. protected $name;
  4. protected $sex;
  5. protected $age;
  6. function __construct($a,$b,$c)
  7. {
  8. $this->name=$a;
  9. $this->sex=$b;
  10. $this->age=$c;
  11. }
  12. function say()
  13. {
  14. echo "我的名字是:".$this->name."性别".$this->sex."年龄".$this->age;
  15. }
  16. }
  17. class student extends person
  18. {
  19. private $school;
  20. //覆盖父类的构造方法,对成员变量进行重写
  21. function __construct($d,$e,$f,$g)
  22. {
  23. $this->name=$d;
  24. $this->sex=$e;
  25. $this->age=$f;
  26. $this->school=$g;
  27. }
  28. function study()
  29. {
  30. echo $this->name."正在".$this->school."学习";
  31. }
  32. function say()
  33. {
  34. echo "我的名字是".$this->name."性别:".$this->sex."年龄".$this->age."正在".$this->school."学习";
  35. }
  36. }
  1. $ren=new person("张三","男",30);
  2. var_dump($ren);
  3. $student=new student("李四","女",20,"胜利中学");
  4. var_dump($student);
  5. $student->say();

子类对父类进行重载的例子(即对父类中定义的量拿过来):php中用parent::方法名().      强类型语言中用关键字  overload 重载

  1. class person
  2. {
  3. protected $name;
  4. protected $sex;
  5. protected $age;
  6. function __construct($a,$b,$c)
  7. {
  8. $this->name=$a;
  9. $this->sex=$b;
  10. $this->age=$c;
  11. }
  12. function say()
  13. {
  14. echo "我的名字是".$this->name."性别".$this->sex."年龄".$this->age;
  15. }
  16. }
  17. class student extends person
  18. {
  19. private $school;
  20. function __construct($d,$e,$f,$g) //引用过来父类的构造函数,并修改
  21. {
  22. parent::__construct($d,$e,$f,$g);
  23. $this->school=$g;
  24. }
  25. function study()
  26. {
  27. echo $this->name."正在".$this->school."学习";
  28. }
  29. function say()
  30. {
  31. parent::say(); //引用过来父类的say()方法,并在下面添加一段
  32. echo "在".$this->school."学校上学";
  33. }
  34.  
  35. }
  1. $ren=new person("张三","男",40);
  2. var_dump($ren);
  3. $student1=new student("李四","女",20,"胜利中学");
  4. var_dump($student1);
  5. $student1->say();

重载可以使类里面的某个方法产生多种效果,根据传入的参数不同,可以执行不同的逻辑

重载也是多态的一种,编译多态

三、多态性:
当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同,称为多态
运行多态

条件
1.要有继承
2.父类引用指向子类实例
3.要有重写
4.调重写的方法

  1. 父类
  2. /* class Ren
  3. {
  4. public virtual string Say()
  5. {
  6. return "说话";
  7. }
  8. }
  9.  
  10. //子类
  11. class China : Ren
  12. {
  13. public override string Say()
  14. {
  15. return "你好";
  16. }
  17. }
  18. //子类
  19. class America : Ren
  20. {
  21. public override string Say()
  22. {
  23. return "hello";
  24. }
  25. }
  26.  
  27. //父类引用r指向子类实例
  28. Ren r = new America();
  29. MessageBox.Show(r.Say());
  30.  
  31. r = new China();
  32. MessageBox.Show(r.Say());
  33.  
  34. //子类的对象可以代替父类的对象
  35. America a = new America();
  36. MessageBox.Show(Eat(a));
  37. //怪兽吃人,需要一个人的参数
  38. public string Eat(Ren r)
  39. {
  40. return "这个人味道不错!";
  41. }
  42. */

php部分--面向对象三大特性-封装(另加连续调用的一个例子)、继承(重写、重载的例子)、多态;的更多相关文章

  1. [.net 面向对象编程基础] (11) 面向对象三大特性——封装

    [.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...

  2. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  3. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  4. Python入门-面向对象三大特性-封装

    一.封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容. 所以,在使用面向对象的封装特性时,需要: 将内容封装到某处 从某处调用被封装的内容 第一步:将内容封装到某处 sel ...

  5. 面向对象三大特性——封装(含property)

    一.封装概念 封装是面向对象的特征之一,是对象和类概念的主要特性. 封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 二.隐藏属性 在p ...

  6. Python()- 面向对象三大特性----封装

    封装: [封装]         隐藏对象的属性和实现细节,仅对外提供公共访问方式.[好处] 1. 将变化隔离: 2. 便于使用:3. 提高复用性: 4. 提高安全性:[封装原则]      1. 将 ...

  7. Python面向对象三大特性(封装、继承、多态)

    封装 类中把某些属性和方法隐藏起来,或者定义为私有,只在类的内部使用,在类的外部无法访问,或者留下少量的接口(函数)供外部访问:从上一篇文章中的私有属性与私有方法中的代码体现了该特性. class m ...

  8. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  9. C++面向对象三大特性

    面向对象三大特性 继承 public protected private public继承 public protected 不可见 private继承 private private 不可见 pro ...

随机推荐

  1. UI UIView

    课程内容:   一.iOS概述 2007年1月9日Macworld大会上公布iPhone OS系统,2010WWDC大会上改名为iOS   二. UI编程概述 UI的本意是用户界面,是英文User和 ...

  2. WP8 学习 在APP.XAML中加入Resources

    <Application.Resources> <local:LocalizedStrings xmlns:local="clr-namespace:test1" ...

  3. “System.Threading.ThreadAbortException”类型的第一次机会异常在 mscorlib.dll 中发

    问题原因: Thread.Abort 方法 .NET Framework 4  其他版本   1(共 1)对本文的评价是有帮助 - 评价此主题 在调用此方法的线程上引发 ThreadAbortExce ...

  4. java基础之 泛型

    泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法 ...

  5. matlab和C/C++混合编程--Mex (六)参数传递

    最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...

  6. 解决json跨域时错误:SyntaxError: invalid label

    将数据做以下返回: $callback = $_GET['callback']; echo $callback.'('.json_encode(array('html'=>$html)).')' ...

  7. 标签navtab

    创建navtab 创建一个navtab有以下两种方式: 1.Data属性:DOM添加属性data-toggle="navtab"后,单击触发. a链接示例: <a href= ...

  8. 2016 - 1- 22 HTTP(三)

    一: iOS中发送HTTP请求的方案 三: HTTP通信过程  1.请求 1.1 HTTP协议规定,一个完整的有客户端发给服务器的请求应包含以下内容: 1.1.1 请求头: 包含了对客户端环境的描述与 ...

  9. php大力力 [035节] 先记录一些链接

    [IT名人堂]专访百分点研发总监:不止于平台,大数据操作系统重磅来袭! [2015-8-11 14:17:04] [IT名人堂]专访1号店技术总监:大型电商网站的IT架构 [2015-8-25 15: ...

  10. php大力力 [015节]兄弟连高洛峰php教程(土豆网栏目地址)

    兄弟连高洛峰php教程 兄弟连高洛峰php教程(土豆网栏目地址) [2014]兄弟连高洛峰 PHP教程1.1.1 新版视频形式介绍 [2014]兄弟连高洛峰 PHP教程1.1.2 BS结构软件类型介绍 ...