PHP面向对象学习的笔记

来源:互联网 发布:重生之网络巨头txt下载 编辑:程序博客网 时间:2024/05/16 15:08

一.

1、什么是面向对象,什么是类

2、使用CLASS创建一个类

3、类的成员属性和成员方法

4、使用new函数对象实例化

 

 

 

 

 

 

起初,面向对象是专指在程序设计中采用封装、继承、抽象等设计方法。可是,这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOAObject Oriented Analysis),面向对象的设计(OODObject Oriented Design)、以及我们经常说的面向对象的编程实现(OOPObject Oriented Program)。

 

面向对象的要素

1. 抽象 ,  2. 封装性 3.共享性 4. 强调对象结构而不是程序结构

什么是类

:我们可以理解成一个功能集合菜单,我们通过类来实现生成我们的方法

 

类的成员属性和成员方法

 

class MyPc{

public $name; //为了让大家养成良好的习惯和今后对PHP6的适应,建议使用 public 而不是var

var $price;

function vod() {

return "PHP100视频教程";

   }

}

$pc1 = new MyPc();

$pc1->name;

 

二.

1、创建一个和多个对象

2、对象中的$this关键字

3、初始化对象  __construct()

4、析构函数 __destruct()

 

 

 

 

 

 

 

对象中的$this关键字

$this关键字是用来访问当前对象中的对象属性和对象方法的系统变量我们可以理解为$this是在对象中特殊的一种使用构造函数和变量的方法)

 

class MyPc{

public $name;

public $price;

function vod() {

$this->name;

}

    $this->vod() ;

 

}

$this仅能在当前对象中使用

初始化对象  __construct()

我们在创建一个类有时候需要初始化一些操作,这个时候我们需要使用初始化函数,在PHP5中有两种初始化方法:

 

1、PHP4中我们需要建立一个与类名称相同的一个对象方法:

class MyPc{

   

 

 

function MyPC ( ) {

//----------初始化操作

    }

}

 

3、PHP5中继承了PHP4但为了更好的针对面向对象开发有了固定函数:

class MyPc{

   

 

 

function __construct() {//-----------

初始化操作

    }

}

 

4、析构函数 __destruct()

能够在对象释放时自动被调用的方法被称为析构函数(规则:后进先出)

PHP4支持析构函数,通过登录在PHP运行终止时用register_shutdown_function()调用的函数,只有类似的实行方法。PHP5正式支持析构函数,能够在类中指定对象释放时的动作。

我们可以理解为垃圾回收机制

当对象内部的操作执行完毕的时候,__destruct()被调用,然后对象所使用的内存被释放出来。

 

三.

1.封装 键字 publicprotectedprivate

2.封装相关函数:__set() , __get()

 

 

 

 

封装是把一些相关的属性和行为隐藏起来,从而得到保护和安全

 

1.   封装关键字

public 表示全局,类内部外部子类都可以访问;

protected表示受保护的,只有本类或子类或父类中可以访问;

private表示私有的,只有本类内部可以使用;

 

class MyPc{

public $name;//----------- 全局属性任何位置都可以引用

protected $price; //-----------保护属性只有本类或子类或父类中可以访问

 

 

private function vod() {//-----------私有属性只有本类内部可以使用

         $this->name;

}

 

}

2.封装相关函数:__set() , __get()

某些特定操作的时候需要访问和赋值封装的类型,这个时候我们就需要其他的函数帮我们完成这些操作,PHP为我们提供了个方法名:__set() , __get()

__set() 取得当前类中封装过私有属性或者方法重新执行或赋值操作

__set($Name,$Value)

__get() 取得当前类中封装过属性或方法并转换成共有属性

__get()

 

四.

1、继承关键字 extends

2PHP继承的规则

3、基类方法重载和父类方法访问

 

 

 

 

 

 

 

1、继承关键字 extends

PHP类的继承,我们可以理解成共享被继承类的内容。PHP中使用extends单一继承的方法,请切忌!(非C++多继承)被继承的类我们叫做父类(基类)继承者成为子类(派生类)

2PHP继承的规则

 

依次被继承,class3拥有class1class2所以功能和属性,避免方法和属性重名

 

3、基类方法重载和父类方法访问

因为属于向下继承的原理,基类不能使用派生类里内容,这个时基类的一些方法不能完成我们的一些派生类的功能,我们就可以进行方法重载避免了,新建方法带来的混乱。

 

方法重载我们也可以理解方法覆盖,在派生类里使用与基类方法重名的方法名称执行重载

重载时我们需要调用原始基类内容,再增加新内容,我们可以使用

基类名 :: 方法名称

 

五.

1、抽象关键字 abstract

2、抽象方法和抽象类的定义

3、抽象类和方法使用规则

 

 

 

 

 

 

1、抽象关键字 abstract

抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象类或者方法我们需要使用adstract关键字

2、抽象方法和抽象类的定义

一个类中至少有一个方法是抽象的,我们称之为抽象类。所以如果定义抽象类首先定义抽象方法。

 

1、类中至少有一个抽象方法

2、抽象方法不允许有{ }

3、抽象方法前面必须要加abstract

abstract class class1{

 

abstract function fun1();

 

}

 

3、抽象类和方法使用规则

抽象类的几个特点:

 

1、不能被实例化,只能被继承

2、继承的派生类当中要把所以抽象方法重载才能实例化

abstract class cl1{

 

abstract function fun1();

 

abstract function fun2();

 

}

继承,重载所有抽象方法:

 

class cl2 extends cl1{

 

function fun1(){

}

function fun2(){

}

 

}

 

 

六.

1、关键字 final

2、关键字 self

3、关键字 static

4、关键字 const

 

 

 

 

 

 

 

1、关键字 final

用来定义类和方法的一个重要关键字,当定义类的时候该类将不能被继承,当用来定义方法的时候该方法将不能被重载。

 

 

final class class1{//---------该类将不能被继承

   

final function fun1(){//--------该方法将不能被重载

 

}

 

}

 

2、关键字 self

用来用类访问当前类中的内容的关键字,类似与$this关键字,但$this是需要类实例化以后才可以使用,self 可以直接访问当前类中的内部成员

self :: 类内部成员(属性或者方法)=

注意:因为没有实例化类访问内部属性或者方法是没有意义的,所以self一般用来访问类中的:静态成员,常量,或者其他定义内容

 

3、关键字 static

用来定义类的静态属性或方法,可以在类未被实例化时使用,静态属性单独占用内存而不会因创建多个对象时而导致同样的方法或者属性重复占用。

 

class class1{

 

static $name;

static function fun1(){//-----------------静态方法内部禁止出现非静态内容

}
}

}

 

类内部访问静态成员------:-------类名称 : : 静态成员    self  : : 静态成员

类外部访问静态成员------类名称 :: 静态成员

4、关键字 const

 

用来定义类中的常量,类似PHP外部定义常量的关键字define();  Const只能修饰类当中的成员属性!

class class1{

 

   const NAME//---------------注意事项:1、建议大写常量

2、常量不使用$符号

   function fun1(){

   }
}

 

七.

1、接口的介绍与创建

关键字 interface

2、接口的引用与规范

关键字 implements

 

 

 

 

 

 

 

接口:一种成员属性全部为抽象的特殊抽象类,在程序中同为规范的作用

 

 

抽象类和

 

接口的区别:

抽象类:

接口:

1、类中至少有一个抽象方法

2、抽象方法前需加abstract

1、类中全部为抽象方法

2、抽象方法前不用abstract

3、接口抽象方法属性为public

4、成员属性必须为常量

 

 

 

接口有自己的创建关键字:interface 与普通类的创建类似

interface demo {//---------------------声明接口类

 

 

    const  NAME="名字";//--------------------对象属性必须为常量

 

 

    function Fun1();//---------------------对象方法全部为抽象方法,前面无须加adstract

 

    function Fun2();

 

}

接口引用区别与之前我们的学的类继承关键字 extends,继承只能是单一性,而接口可以使用关键字:implements 多个引用并用逗号”,” 分开

设已有接口 demo , demo2 , demo3

1、普通类引用接口例子:

 

class mypc implements demo , demo2 , demo3{

}

2、抽象类引用接口例子:

 

abstract class mypc implements demo , demo2 , demo3{

}

2、接口的引用与规范(先继承后接口,单继承多接口)

3、继承父类引用接口并存例子:

 

class mypc extends root implements demo , demo2 , demo3{

}

 

4、接口与接口继承:

 

interface demo3 extends demo{

}

 

八.

1、多态的介绍与优势

2运算符 instanceof

3、多态的简单应用

 

 

 

 

 

 

多态性是继抽象和继承后,面向对象语言的第三个特征。从字面上理解,多态的意思是多种形态,简单来说,多态是具有表现多种形态的能力的特征,在OO中是指语言具有根据对象的类型以不同方式处理。

 

优势

OOP的模式并不仅仅是把很多函数和功能集合起来,目的而是使用类,继承,多态的方式描述我们生活中的一种情况。从而使得我们的代码更具有的意义。帮助我们减少一些重复性的代码和条件语句的判断。

2、运算符 instanceof

 

PHP 一个类型运算符instanceof 用来测定一个给定的对象是否来自指定的对象类。

 

class A { }

class B { }

 

$thing = new A;

 

if ($thing instanceof A) {

    echo 'A';

}

if ($thing instanceof B) {

    echo 'B';

}

 

九.

1、对象描述的配置

2、对象方法的异常处理

3、克隆对象的应用

4、自动载入对象的方法

 

 

 

 

 

 

 

 

 

1、对象描述的配置

方法名 __tostring()

我们可以直接打印对象句柄,从而获得该方法的基本信息或其他内容。

class My{

 

function __tostring ( ){

 

echo "我所要显示的内容";

}

}

 

$p = new My();

 

echo $p;

 

输出结果:我所要显示的内容

2、对象方法的异常处理

 

方法名 __call($funname,$arr_value)

调用一些不存在的对象方法的异常处理,使程序继续正常运行。

class My{

   

function __call($n,$v){

 

echo "错误的方法名".$n;

   

echo "错误的参数".Print_r($v);//---- 因为参数会有多个所要用数组的方式保存,打印的时候也要就用print_r 输出

 

 

}

}

3、克隆对象的应用

方法名 __clone() 

关键字  clone

通过克隆的方式我们可以在内存中生成两个一样的对象或升级原对象。

class My{

 

function __clone( ){

 

  echo "克隆时自动调用的函数";

   }

}

区别:

$a=new My()

$b=$a; //---------内存中只有一个对象

$a=new My()

 

$b= clone $a;//------------ 内存中会有两个对象

 

4、自动载入对象的方法

 

方法名 __autoload()

快速取得对象名称并自动载入进当前页面

function __autoload($class_n){//------- 该方法是在类以外单独的方法也就是我们所谓的构造函数

 

 

include($class_n.".php");//--将会被自动调用,执行如下:include("mypc.php");include("demo.php");

 

}

 

$p=new Mypc();

$d=new demo();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击