面向对象 == OO
    学习面向对象 == XXOO;[学习使我快乐!]

<!--附一个demo类的实例化-->
http://note.youdao.com/noteshare?id=38c6a7efa52f1d7911ac49d6eeb4a5d3&sub=AEAF7398B66F4DD7979E76F2954F8D0E

类文件的书写方式
  1函数的文件命名:xxx.func.php
  2类的文件名:xxx.class.php(单类文件)
  3类的文件名一般与类名相同。类是使用驼峰命名法,每个单词的首字母大写。意味着文件名也要首字母大写。

1.类

class Demo{
//成员属性
public $id = 'obj';//公共的 protucted $name = 'oob';//受保护的 private $age = 1223;//私有化封装的
//被private修饰的成员属性不能够在类的外部进行访问;可以在类的内部访问
//被private修饰的成员方法也不能够在类的外部进行访问
//封装等级问题
//Private = 1;
//Protected = 2;
//Public = 3; //成员方法
function demo(){ } }

1.声明成员属性必须使用关键字var或者public,private等;
2.声明成员属性时,可以赋值,也可以不赋值。
3.声明成员属性时,不能赋一个函数值。

4.声明成员方法时,需要使用function关键字
5.声明成员方法可以传入参数,也可以不传入参数
6.声明成员方法时,方法允许存在返回值。

7.类中只能出现成员属性和成员方法,不允许出现其他的代码,否则会有语法错误。

 2.对象(通过类实例化出来)

实例化格式1:$b = new Demo();

实例化格式2:$b = new Demo;

类和对象的关系:1.对象是由类产生的一个实际的事物或者操作流程。这个过程叫做实例化(实:实际、实体、例、个例、化:过程)

使用对象的成员属性
对象变量->成员属性名;
使用对象的成员方法;
对象变量->成员方法名();

 3.类中的魔术方法

__construct();//构造函数

  触发时机:在对象实例化的时候自动触发
  作用:初始化处成员属性
  参数:可以有,可以没有,取决于设定和逻辑
  返回值:没有

__destruct();//析构函数

  触发时机:在摧毁对象的时候自动触发(unset或者页面执行完毕);
  作用:回收对象使用过程中的资源
  参数:没有
  返回值:没有

__get()

  触发时机:访问私有成员属性时自动触发
  功能:1,防止访问私有成员属性时报错,2.为私有成员属性访问提供后门
  参数:1个。。访问的私有成员属性名称
  返回值:可以有,可以没有。

__set()

  触发时机: 对私有成员属性进行设置值的时候自动触发
  功能:1.屏蔽错误,2为私有成员属性设置值
  参数:2个,1个私有成员属性名,2要设置的值
  返回值:无

__isset()

  触发时机:对私有成员属性进行isset检测时自动触发
  功能:1.代替对象外部的isset检测私有成员属性,返回结果
  参数:1个 访问的私有成员属性名
  返回值: 一般返回isset(属性)的结果

__unset();

  触发时机:在对象外部对私有成员属性进行unset操作时自动触发
  功能:代替对象外部的unset()操作
  参数:1个 私有成员属性名
  返回值: 无

__call()

  触发时机: 调用不存在的方法时自动触发
  功能1.屏蔽错误2.为不存在的方法定义功能
  参数:2个,1个是不存在的方法名,1个是所有传入的实参列表;
  返回值:可有可无

_sleep()

  触发时机:在对象进行串行化操作时自动触发
  功能:指定需要串行化的成员属性。
  参数:无
  返回值:需要返回一个数组类型,每个元素都是需要串行化的成员属性名。

__wakeup()

  触发时机:在对象进行反串行化时自动触发
  功能:反串行化时自动修改部分成员属性值
  参数:无
  返回值:无

__tostring()

  触发时机:对一个对象进行echo操作时自动触发,
  功能:简化操作或者为对象输出值
  参数:无
  返回值:必须有,并且必须为字符串类型。

__clone()

  触发时机:对对象进行克隆操作时自动触发
  功能:修改克隆之后的对象的部分成员属性。
  参数:无
  返回值:没有

__autoload()

关键字

$this 表示当前的对象。
作用:在当前对象的成员方法中,调用当前对象的成员属性
如果代码中具有$this出现,那么该类必须实例化才能使用。

提示:如果要使用连贯操作,在方法的最后必须返回$this,代表当前对象。

self 表示当前类
在类中使用

extends 继承
class 类型 extends 父类,父类2{
写子类独立的成员属性和成员方法
或重构父类的成员属性和成员方法
}
概念:
父类: 被其他类继承的类就是父类,也叫做基类
子类:继承其他类的类就是子类,也叫做派生类

生物学逻辑继承 单继承
社会学逻辑继承 一个徒弟可以有多个师傅的关系 多继承

1.子类继承父类既具备父类中所有的成员属性和方法(私有的除外)
2.子类继承父类之后可以具有子类独有的属性和方法
3.在继承时,子类中允许出现和父类同名的方法,这种情况下不会冲突,而是子类的方法会覆盖父类的方法,这种方式叫做重载(重新加载)
4.魔术方法也可以被子类继承
5.如果父类具有构造方法,子类也具有需要构造方法进行构造的成员属性,此时需要在子类中重载父类的构造方法,并且在构造方法中使用parent::construct();进行调用父类的构造方法,构造继承而来的父类的成员属性。

parent 父类
继承的类中使用,代表父类

final 禁止子类继承父类

1.用来修饰成员方法
2.用来修饰类

1.禁止在子类中重载父类的方法
2.被final修饰的类无法被继承
2.被final修饰的方法或属性也无法被继承

<?php
final class Ma{
//成员属性
public $name = '马';
public $sex;
//成员方法
//跑
function pao(){
echo '得儿驾~~~~';
}
//下崽
final private function xiazai(){
echo '诶呀妈呀,疼死我了,要生了';
}
} //骡子类
class LuoZi extends Ma{
} //实例化对象
$lz = new LuoZi;
var_dump($lz);
$lz->xiazai();

const 类中定义常量
类中的常量不归对象所有,而是归类所有。
1.在类中声明常量使用CONST关键字
2.声明常量时需要给常量赋值
3.声明常量归类所有不归任何对象所有

4.类中常量的访问方式
类外部

类名::常量名

类内部

类名::常量名
Self::常量名

static 声明静态成员
静态成员的特征是:不归对象所有,而是归类所有

1.static 关键字既可以修饰成员属性,也可以修饰成员方法
2.Static声明的成员都是归类所有,而不归对象所有的。在没有对象的情况下,可以通过类来访问。
3.能声明静态成员的就声明静态成员。效率高。
4.具有动态成员的方法不可以声明为静态成员方法
5.如果方法中没有$this存在,那么这个方法实际上已经是一个静态方法。(php版本>5.3之后请写上static关键字)

静态成员访问:
类内部
类名::$静态成员属性名
Self::$静态成员属性名

类名::静态成员方法名();
Self::静态成员方法名();
类外部
类名::$静态成员属性名
类名::静态成员方法名();

对象->静态成员方法名() (方法是引用的 一般不用)

interface 定义接口

implements 继承接口

面向对象的三大特征:封装、继承、多态


1.封装的关键字

Private 私有化封装

Public 公共的

Protected 受保护的

关键字/位置 | 类外 | 子类 | 类内部
---|---|---|---
Private | X | X | √
protected | X | √ | √
public | √ | √ | √

抽象类

```
1.抽象方法就是没有方法体的方法,方法体相当于函数体,抽象方法前,必须使用abstract关键字,且方法后不能写{},但是要写分号结束;
2.如果类中有抽象方法,那么这个类前面也必须使用abstract关键字进行修饰。
3.抽象类中可以具有非抽象方法
4.抽象方法可以有参数。不能有返回值。要实现该抽象方法,必须传入同样的参数
5.抽象类不能直接使用,必须由其他类继承且完全实现出所有抽象方法,才可以使用。抽象类主要是给其他类进行继承操作。
6.抽象类可以继承抽象类
7.抽象类中不可以使用private关键字

// 抽象类
abstract class User{
public $name = ''; abstract function add();
abstract function drop()
abstract function show();
abstract function mod();
}

接口

如果一个类中没有任何的非抽象方法,且不存在常量之外的任何成员属性,那么这个类就是一个接口

特征:
1.声明一个接口不使用class关键字而是使用interface关键字
2.接口中的抽象方法不能接abstract关键字。
3.接口只能用public关键字,不可以使用protected 或者private
4.接口中不允许有任何的成员属性,除了常量;
5.接口的继承不是使用extends 而是使用implements关键字
6.Extends只能继承一个普通类或者是一个抽象类,而implements可以同时继承多个接口,从而模拟多继承。

interface Usb{
const U_VERSION = '3.0'; public function tongdian();
public function install();
public function using();
public function uninstall();
}
class usbsb implements usb,Bluetooth{
public function tongdian(){
echo "USB鼠标正在通电";
}
public function install(){
echo 'USB鼠标正在安装';
}
public function using(){
echo '正在使用USB鼠标';
}
public function pressA(){
echo 'USB鼠标正在卸载';
} }

抽象类和接口的区别:

抽象类的成员可以具有访问几倍,而接口的成员全部为public级别。

抽象类可以包含成员属性,而接口只可以有常量

抽象类可以继承接口,而接口不能继承抽象类。

抽象类的成员可以具有具体的实现,而接口不行。

抽象的子类可以选择性实现基类的抽象方法,而接口的子类必须实现。

注:有错或不全面,请路过的大神支出!谢谢

PHP 的面向对象 与 类的更多相关文章

  1. OC学习总结之面向对象和类

    OC学习总结之面向对象和类   Objective-c是c语言的母集合,它的原意就是在原始的c语言的主体上加入面向对象的特性.1.面向对象和面向过程  面向对象和面向过程是编程的两种思考方式.面向对象 ...

  2. Java面向对象 Object类 内部类

     Java面向对象 Object类    内部类 知识概要:                 一:Object类                 二:内部类 匿名内部类的写法 1.Object O ...

  3. 【转】Python之面向对象与类

    [转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...

  4. Java面向对象-Java类的继承及super关键字

    Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...

  5. python进阶01 面向对象、类、实例、属性封装、实例方法

    python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...

  6. Python基础-面向对象初识--类

    什么是类 具有相似功能和属性的一类实物 什么是对象 类的具体体现,具体到一个 面向对象的优势 1.类是一组相似功能的集合,使组织结构更加清晰和规范化 2.研究面向对象要有上帝的思维,用面向对象设计程序 ...

  7. python 面向对象与类的基本知识

    一  什么是面向对象,面向对象与类的关系. 面向对象的程序设计是用来解决扩展性. 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象 ...

  8. Python之面向对象新式类和经典类

    Python之面向对象新式类和经典类 新式类和经典类的继承原理: 在Python3中,就只有新式类一种了. 先看Python3中新式类: 类是有继承顺序的: Python的类是可以继承多个类的,也就是 ...

  9. Python之面向对象元类

    Python之面向对象元类 call方法: class People: def __init__(self,name): self.name=name # def __call__(self, *ar ...

  10. Python 面向对象之一 类与属性

    Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...

随机推荐

  1. Open vSwitch系列之一 Open vSwitch诞生

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs 2006年,SDN诞生于美国GENI项目资助的斯坦福大学Clean Slate课题 ...

  2. IDE安装完成无法打开,报错Fail load JVM DLL 问题与解决方案

    安装完成pycharm 在打开pycharm的时候出现报错 Fail load JVM DLL xxxx xxx. 解决方案 安装Microsoft Visual C++ 2010 Redistrib ...

  3. ESP8266开发之旅 进阶篇⑤ 代码规范 —— 像写文章一样优美

    1.前言     之前,一直在跟大伙分享怎么去玩蓝牙模块,怎么去玩wifi模块,怎么去玩json,然后有很多小伙伴就留言各种问题或者说直接怼他的代码过来让我看,然后我就一脸懵逼(代码中到处各种abcd ...

  4. iOS cocoapods导入项目 出现 "___gxx_personality_v0", referenced from: 或者 clang: error: linker command failed with exit code 1 (use -v to see invocation) 错误

    今天想导入PNChart 编译的时候出现了  "___gxx_personality_v0", referenced from:  和 clang: error: linker c ...

  5. Kafka权威指南阅读笔记(第八章)

    跨集群数据镜像 使用场景: 区域集群和中心集群 这种场景下,每个区域的应用程序只访问相应的区域内的集群.而有些情况下,需要将各个集群的信息汇总到中心集群,就可以用中心集群分析业务数据了. 冗余 一个K ...

  6. jupyter notebook启动需要输入密码的问题

    问题描述: 安装完jupyter notebook之后,启动时需要输入密码,如下图所示: 解决方法: 1.启动jupyter notebook 2.在另一个的终端中输入 jupyter noteboo ...

  7. SpringBoot项目集成socketIo实现实时推送

    netty-socketio maven依赖 <dependency> <groupId>com.corundumstudio.socketio</groupId> ...

  8. 使用 Github + Hexo 从 0 搭建一个博客

    最近有几位同学在公众号后台留言问我的博客站是怎么建站的,思来想去,还是写一篇从 0 开始吧. 前置准备 我们先聊一下前置准备,可能很多同学一听说要自己搭一个博客系统,直接就望而却步.不得有台服务器么, ...

  9. Docker的centos7容器中如何安装mongodb

    下载安装包: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz 解压安装包 tar -zxvf mongodb ...

  10. 深入了解 Java Resource && Spring Resource

    在Java中,为了从相对路径读取文件,经常会使用的方法便是: xxx.class.getResource(); xxx.class.getClassLoader().getResource(); 在S ...