近期跟着别人开发一套php程序,深感自己面向对象很白痴,于是再次巩固了一下面向对象的学习,自己整理了一下这几天面向对象的东西,给大家分享!!

面向对象的三大特性:

封装 -- 隐藏内部实现,稳定外部接口

继承 -- 子类继承父类成员,实现代码复用

多态 -- 不同子类对同一消息做出不同的反映

一、接口 -- 是一套规范,遵守这个规范就可以实现功能

在PHP中,接口同样是一种规范和标准,可以约束类的行为,定义一个接口不指定具体的实现。

接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦定义了接口,就可以在类中实现它。这样,类就可以支持接口所指定的所有属性和成员。

注意:
接口不能单独存在。接口不能像实例化一个类那样实例化接口。接口不能包含实现其成员的任何代码,而只能定义成员本身。实现接口必须在引用接口的类中实现。

一个类可以支持多个接口,多个类也可以支持相同的接口。所以接口的概念让用户和其他开发人员更容易理解其他人的代码。

二、多态性

1、指不同的对象收到相同消息时,会产生不同行为
2、同一个类在不同的场合下表现出不同的行为特征

三、抽象类和抽象方法

1、抽象类用来列举一个类所需要的行为
2、抽象类不明确提供具体实现方法
3、抽象类必须由其子类实现它的抽象方法(除非子类也具有抽象性)
4、抽象类不能被实例化
5、抽象类不能被锁(final修饰)

四、抽象类的使用场合

1、抽象类和抽象方法实现多态性
2、父类提供一系列规定,约束子类的行为
3、父类可以提供一些共性的行为
以上就是我对面向对象的总结,下面就是详细的说说php面向对象的重点,难点!
类: [url=http://www.t00ls.net/#viewSource]链接标记预览源代码[/url] [url=http://www.t00ls.net/#printSource]链接标记打印[/url][url=http://www.t00ls.net/#about]链接标记关于[/url]01<?php

02/*

03 类的基本知识

04 1、类使用class关键字定义,类的名称每个单词首字母大写

05 2、类的属性必须用封装关键字修饰(public、protected、private)

06 3、类的方法可以不被封装关键字修饰,默认为:public

07 4、类中的构造函数:__construct(){},默认为空,可初始化属性。

08 也可以重载构造函数,有任意多个参数。注意:PHP中构造函数

09 只能有一个。

10 5、类中的析构函数:__destruct(){}

11*/

12/*

13 类的封装关键字

14 1、public -- 公开的

15 2、protected -- 受保护的

16 3、private -- 私有的

17

18 就是因为使用了受保护的或私有的封装关键字,所以产生了读写方法,

19 于是写方法可以验证数据的合法性;读方法可以将受保护或私有的属

20 性保护起来不被外部修改。

21

22 4、__get($n){return $this->$n;} 读方法

23 5、__set($n,$v){$this->$n=$v;} 写方法

24

25*/

26class People{

27 private $name;

28 private $age;

29 private $sex;

30

31 //构造函数

32 function __construct($name,$age=18,$sex="男"){

33 $this -> name = $name;

34 $this -> age = $age;

35 $this -> sex = $sex;

36 echo $this -> show();

37 }

38

39 //析构函数

40 function __destruct(){

41 //echo "{$this->name}被释放了!";

42 }

43

44 //读属性

45 function __get($n){

46 if($n == "name"){

47 return $this -> $n;

48 }

49 }

50

51 //写属性

52 function __set($n,$v){

53 if($n == "name"){

54 $this -> $n = $v;

55 }

56 }

57

58 public function show(){

59 return "恭喜你!创建{$this->name}对象成功!";

60 }

61}

62

63/*

64 继承

65 1、使用关键字extends

66 2、被继承的类叫做:父类(基类)

67 3、继承的类叫做:子类(派生类)

68 4、单一继承

69 5、具有传递性,即:父类有的,子类也会有

70 6、子类的封装关键字级别不能低于父类

71 7、父类构造函数也会被继承

72 8、重载

73*/

74class Stu extends People{

75

76

77 public function show(){

78 return parent::show()."O(∩_∩)O哈哈~";

79 }

80}

81$stu = new Stu("张三");

82echo $stu -> name;

83?>
抽象类: [url=http://www.t00ls.net/#viewSource]链接标记预览源代码[/url] [url=http://www.t00ls.net/#printSource]链接标记打印[/url][url=http://www.t00ls.net/#about]链接标记关于[/url]01<?php

02/*

03 抽象类

04 1、使用abstract关键字修饰的类叫抽象类,类中至少有一个抽象方法,

05 可以有具体方法。

06 2、抽象类不能被实例化,不能被锁(final修饰),只能被继承

07 3、抽象类必须由其子类实现它的抽象方法(除非子类也具有抽象性)

08*/

09abstract class Animal{

10 protected $name;

11 protected $age;

12 protected $weight;

13

14 abstract function __construct();

15

16 abstract function eat($name);

17

18 abstract function sleep();

19

20 static function show($what){

21 return "我是{$what->name}!";

22 }

23}

24

25//Dog类

26class Dog extends Animal{

27 function __construct($name,$age,$weight){

28 $this -> name = $name;

29 $this -> age = $age;

30 $this -> weight = $weight;

31 }

32

33 function eat($n){

34 return $this->name."在吃".$n;

35 }

36

37 function sleep(){

38 return $this->name."睡的正酣!";

39 }

40

41 function wangwang(){

42 return "汪汪叫!!!";

43 }

44}

45

46//Cat类

47class Cat extends Animal{

48 function __construct($name,$age,$weight){

49 $this -> name = $name;

50 $this -> age = $age;

51 $this -> weight = $weight;

52 echo $this->miaomiao();

53 }

54

55 function eat($n){

56 return $this->name."在吃".$n;

57 }

58

59 function sleep(){

60 return $this->name."睡的正酣!";

61 }

62

63 function miaomiao(){

64 return "喵喵叫!!!";

65 }

66}

67

68$dog = new Dog("旺财",4,"10kg");

69echo $dog->sleep();

70echo "";

71$cat = new Cat("龙猫",2,"5kg");

72echo "";

73echo $cat->sleep();

74echo "";

75echo Animal::show($dog);

76echo "";

77echo Animal::show($cat);

78?>
接口: [url=http://www.t00ls.net/#viewSource]链接标记预览源代码[/url] [url=http://www.t00ls.net/#printSource]链接标记打印[/url][url=http://www.t00ls.net/#about]链接标记关于[/url]01<?php

02interface IUsb{

03 const name1="3.0接口";

04 function type1($what);

05 function power1();

06}

07

08interface IApi{

09 const name2="扩展插槽";

10 function type2();

11 function power2();

12}

13

14class Pc implements IUsb,IApi{

15

16 function type1($what){

17 if($what == IUsb::name1){

18 return IUsb::name1.$this->power1();

19 }

20 else{

21 return "接口不对,无法使用!";

22 }

23 }

24

25 function power1(){

26 return "接口正确,电源开启中...";

27 }

28

29 function type2(){}

30

31 function power2(){}

32}

33

34class Mp3 implements IUsb{

35 public $name = IUsb::name1;

36 function type1($s){}

37 function power1(){}

38}

39$p = new Pc();

40$mp3 = new Mp3();

41echo $p -> type1($mp3->name);

42?>
希望对大家的php学习有所帮助,呵呵,反正这几天我重温面向对象收获很多,也提醒广大同学,温故而知新!!!!

php面向对象学习的更多相关文章

  1. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  2. JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)

    一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...

  3. Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)

    程序设计的三种基本结构: 面向对象,面向过程,函数式编程   1,什么是面向对象编程    面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就 ...

  4. Java面向对象学习目录

    Java面向对象学习目录 以下为面向对象学习目录,有待补充的部分,我还会再后续的学习过程中加以补充与修改~ 一.面向对象编程思想 二.Java类及类中成员 属性 方法 构造器 代码块 内部类 面向对象 ...

  5. (转)Python之路,Day6 - 面向对象学习

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...

  6. web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记

    hi 保持学习数量和质量 1.jQuery操作DOM元素 ----使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,a ...

  7. 深入js的面向对象学习篇——温故知新(一)

    在学习设计模式前必须要知道和掌握的***. 为类添加新方法: Function.prototype.method = function(name,fn) { this.prototype[name] ...

  8. js面向对象学习

    纯属笔记,加强记忆,不是教程,欢迎纠错,没有逻辑,不太适合学习使用. -------------- 继承多态等太多概念难以理解,还是从实践中慢慢学吧!争取能大致看懂网上的开源的代码. -------- ...

  9. python面向对象学习(二)基本语法

    目录 1. dir内置函数 2. 定义简单的类(只包含方法) 2.1 定义只包含方法的类 2.2 创建对象 2.3 编写第一个面向对象程序 3. 方法中的self参数 3.1 案例改造 -- 给对象添 ...

随机推荐

  1. Redis基础(转)

    ServiceStack.Redis实践    Redis的C#客户端我选择的是ServiceStack.Redis,相比Booksleeve redis-sharp等方案,它提供了一整套从 Redi ...

  2. freeregex-0.01 使用文档

    -- freeregex,简化字符串处理 freeregex使用大体分为两个部分: 正则确定 功能操作 正则确定:共有EMAIL.IP等静态属性:anyOf(String regex)静态方法 :和o ...

  3. ————weak 和————block

    Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock)(int) ...

  4. ubuntu 15 安装cuda,开启GPU加速

    1 首先要开启GPU加速就要安装cuda.安装cuda,首先要安装英伟达的驱动.ubuntu有自带的开源驱动,首先要禁用nouveau.这儿要注意,虚拟机不能安装ubuntu驱动.VMWare下显卡只 ...

  5. Redis GetTypedClient

    C#操作Redis   未包含GetTypedClient定义 原创,转载请注明出处. VS版本:2015 用NuGet安装了Redis的包 按照百度的各种教程来操作,但是发现网上下载的DEMO可以正 ...

  6. Coursera Machine Learning: Regression 证书

  7. JavaWeb 学习0010-今日问题 2016-12-3

    2016-12-3 1. 今天要做的第一个问题就是,怎么把网页变得好看点: addStudent/listStudent页面都有改动 其中 list页面还有了<c:if 的语句这是还没练习过得知 ...

  8. Handler使用总结(转)

    方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread ...

  9. 打造 html5 文件上传组件,实现进度显示及拖拽上传,支持秒传+分片上传+断点续传,兼容IE6+及其它标准浏览器

    老早就注册了博客园帐号,昨天才发现,连博客都没开,Github也是一样,深觉惭愧,赶紧潜个水压压惊`(*∩_∩*)′ 言归正传.大概许多人都会用到文件上传的功能,上传的库貌似也不少,比如(jQuery ...

  10. POJ 3057 Evacuation 二分图匹配

    每个门每个时间只能出一个人,那就把每个门拆成多个,对应每个时间. 不断增加时间,然后增广,直到最大匹配. //#pragma comment(linker, "/STACK:10240000 ...