面向对象 == 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. restapi(8)- restapi-sql:用户自主的服务

    学习函数式编程初衷是看到自己熟悉的oop编程语言和sql数据库在现代商业社会中前景暗淡,准备完全放弃windows技术栈转到分布式大数据技术领域的.但是在现实中理想总是不如人意,本来想在一个规模较小的 ...

  2. Kafka权威指南阅读笔记(第六章)

    Broker配置 Kafka可以同时拥有可靠的主题和非可靠的主题.非可靠的主题允许丢失. 复制系数 主题级别的配置参数是 replication.factor,在Broker级别则可以通过defaul ...

  3. nginx配置中location匹配规则详解

    一.概述 nginx官方文档给出location语法如下: 1 location [=|~|~*|^~] uri { … } 其中,方括号中的四种标识符是可选项,用来改变请求字符串和uri的匹配方式. ...

  4. vue 父子组件通信详解

    这是一篇详细讲解vue父子组件之间通信的文章,初始学习vue的时候,总是搞不清楚几个情况 通过props在父子组件传值时,v-bind:data="data",props接收的到底 ...

  5. fenby C语言 P16

    while先判断,不符合,不执行 dowhile后判断,不符合,执行一次 #include <stdio.h> int main(){ int i=1,sum=0; do{ sum=sum ...

  6. Dubbo学习系列之十六(ELK海量日志分析框架)

    外卖公司如何匹配骑手和订单?淘宝如何进行商品推荐?或者读者兴趣匹配?还有海量数据存储搜索.实时日志分析.应用程序监控等场景,Elasticsearch或许可以提供一些思路,作为业界最具影响力的海量搜索 ...

  7. 图数据库PageRank算法

    目录: 定义 计算原理 定义: 假设对象A具有指向它的对象T1 ... Tn.参数d是阻尼系数,取值范围在0和1之间,通常将d设置为0.85.C(A)被定义为从对象A出去的连接数. 对象A的PageR ...

  8. Phpstudy隐藏后门

    Phpstudy隐藏后门 1.事件背景 Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache.PHP.MySQL.phpMyAdmin.ZendOptimizer多款 ...

  9. numpy.array 合并和分割

    # 导包 import numpy as np numpy.array 的合并 .concatenate() 一维数组 x = np.array([1, 2, 3]) # array([1, 2, 3 ...

  10. 卡特兰数&&prufer序列&&BSGS水题集

    首先说一下BSGS的一个坑点: 解方程A^x≡B(mod p) 需要特判一个东西=>A%p==B%p==0? 如果相等的话puts("1")反之则无解. 因为如果A%p=0, ...