php面向对象学习
近期跟着别人开发一套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面向对象学习的更多相关文章
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)
一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...
- Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)
程序设计的三种基本结构: 面向对象,面向过程,函数式编程 1,什么是面向对象编程 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就 ...
- Java面向对象学习目录
Java面向对象学习目录 以下为面向对象学习目录,有待补充的部分,我还会再后续的学习过程中加以补充与修改~ 一.面向对象编程思想 二.Java类及类中成员 属性 方法 构造器 代码块 内部类 面向对象 ...
- (转)Python之路,Day6 - 面向对象学习
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
- web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记
hi 保持学习数量和质量 1.jQuery操作DOM元素 ----使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,a ...
- 深入js的面向对象学习篇——温故知新(一)
在学习设计模式前必须要知道和掌握的***. 为类添加新方法: Function.prototype.method = function(name,fn) { this.prototype[name] ...
- js面向对象学习
纯属笔记,加强记忆,不是教程,欢迎纠错,没有逻辑,不太适合学习使用. -------------- 继承多态等太多概念难以理解,还是从实践中慢慢学吧!争取能大致看懂网上的开源的代码. -------- ...
- python面向对象学习(二)基本语法
目录 1. dir内置函数 2. 定义简单的类(只包含方法) 2.1 定义只包含方法的类 2.2 创建对象 2.3 编写第一个面向对象程序 3. 方法中的self参数 3.1 案例改造 -- 给对象添 ...
随机推荐
- 关于NIO
操作系统的IO控制 在整个IO控制方式的发展过程中,始终贯穿着这样一条宗旨:即尽量减少主机对IO控制的干预,把主机从繁杂的IO控制事务中解脱出来,以便更多地去完成数据处理任务.为了缓和高速CPU和IO ...
- Could not synchronize database state with session
今天做一个简单保存时,db2数据库报的错误,网上收集了下问题的解决办法~ 1.主键不是自动生成的,然后自己没手动设置. 2.插入的实体字段跟数据库的关键字冲突. 3.更新的时候,如果更新一个不存在的i ...
- @RequestBody接收ajax的json字符串
在使用ajax进行请求,并传递参数时,偶尔需要把数组作为传递参数,这是就要使用@RequestBody来解决这个问题 在页面端的处理: (1)利用JSON.stringify(arr)需要把json对 ...
- zabbix微信告警实践
首先你得有个企业号!!!具体操作步骤可以参考http://itnihao.blog.51cto.com/1741976/1733245,里面写的很详细就不重复了. 微信公众号注册并配置完成后,还需要让 ...
- Hibernate持久化类属性映射
Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据. 适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异. Hi ...
- 搜索引擎系列 ---lucene简介 创建索引和搜索初步
一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 :Lucene得名于Doug妻子 ...
- textArea 高度自适应
<textarea name="apparatus" class="dhxTextArea" style="width:100%;height: ...
- Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005.
Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} fai ...
- 安装swoole 扩展,在phpinfo中显示,但是php -m 中不显示的问题
步骤如下: 1 首先找到php.ini的目录:linux命令:find / -name php.ini 我的路径如下:
- Unity3d利用opencv保存游戏视频
脚本MyVideoWriter.cs using UnityEngine; using System.Collections; using OpenCvSharp; using OpenCvSharp ...