PHP面向对象开发的学习08-18

1.面向对象的三大特点(封装,继承,多态)缺一不可.

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

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

class MyPc{

public $name;

var $price;

 function vod() {

  return "PHP100视频教程";

   }  }

使用new函数对象实例化。new 对象名( 参数 )

$pc1 = new MyPc();

$pc1->name;

 

4.创建一个和多个对象我们只需要多次使用 new 函数 ,进行对类的实例化

$pc1 = new MyPc();

$pc2 = new MyPc();

$pc3 = new MyPc()。

为了和今后对PHP6的适应,建议使用 public 而不是  var

5.对象中的$this关键字

$this关键字是用来访问当前对象中的对象属性和对象方法的系统变量

6.初始化对象  __construct()。(__下划线为英文状态下两划)

创建一个类有时候需要初始化一些操作,这个时候我们需要使用初始化函数

php4:

class MyPc{

   function MyPC ( ) {

        初始化操作      

      }   }

php5:

class MyPc{

   function __construct() {

        初始化操作     

   } }

(上述两者相等

7.析构函数 __destruct()

能够在对象释放时自动被调用的方法被称为析构函数

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

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

规则:后进先出

 

8.封装

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

封装关键字:

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

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

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

例如:

class MyPc{

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

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

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

         $this->name;

           }

   ……

}

9.封装相关函数 _set()  ,_get()

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

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

 

10.继承

继承关键字 :extends。

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

class MyPc{

……

……

继承后;

class home extends MyPc{

……

……

11.基类方法重载和父类方法访问

因为属于向下继承的原理,基类不能使用派生类里内容

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

基类名 :: 方法名称

 

12.抽象关键字 :abstract

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

abstract class class1{

   abstract function fun1();
……

}

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

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

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

 

13.抽象类和方法使用规则

抽象类的几个特点:

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

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

 

14.类中的常用关键字

关键字 :final

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

当用来定义方法的时候该方法将不能被重载

final class class1{

……

   final function fun1(){

    ……

   }
……

}

关键字 : self

用来用类访问当前类中的内容的关键字,类似与$this关键字,但$this是需要

类实例化以后才可以使用,self 可以直接访问当前类中的内部成员

self :: 类内部成员(属性或者方法) 等价于  类名 :: 类内部成员(属性或者方法)

self一般用来访问类中的:静态成员,常量,或者其他定义内容。

 

关键字 : static

用来定义类的静态属性或方法,可以在类未被实例化时使用,静态属性单独占

用内存而不会因创建多个对象时而导致同样的方法或者属性重复占用。

class class1{

   static $name;

   static function fun1(){

    ……

   }
}

静态成员的访问:                 

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

                              self  : : 静态成员

 

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

 

关键字 :const

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

class class1{

   const NAME; 

   function fun1(){

    ……

   }
}

注意事项:

1、建议大写常量

2、常量不使用$符号

 

15.类中接口的应用

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

抽象类与接口:

 

区别:

抽象类:

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

2、抽象方法前需加abstract

接口:

1、类中全部为抽象方法

2、抽象方法前不用加abstract

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

4、成员属性必须为常量

 

共同点:

1、本身都不能被实例化,必须被继承或者引用

2、继承或者引用后,需要把所有抽象方法重载方可使用

 

16.接口的创建

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

interface demo {                   //声明接口类;

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

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

    function Fun2(); 

}

17.接口的引用与规范

接口引用区别于之前我们的学的类继承关键字 extends,继承只能是单一性

接口可以使用关键字:implements 多个引用并用逗号  ,  分开.

 

设已有接口 demo , demo2 , demo3

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

  class mypc implements demo , demo2 , demo3{

       ……

    }

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

   abstract class mypc implements demo , demo2 , demo3{

      ……

    }

 

设已有接口 demo , demo2 , demo3 父类 root

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

  class mypc extends root implements demo , demo2 , demo3{

       ……

    }              //先继承后接口,单继承多接口

 

4、接口与接口继承:

   interface demo3 extends demo{

      ……

    }

 

18.多态

多态:多态性是继抽象和继承后,面向对象语言的第三个特征。从字面上理解,多态的意思是“多种形态”,简单

         来说,  多态是具有表现多种形态的能力的特征,在OO中是指“语言具有根据对象的类型以不同方式处理。

运算符 :instanceof

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

class A { }

class B { }

$thing = new A;

if ($thing instanceof A) {

    echo 'A';

}

if ($thing instanceof B) {

    echo 'B';

}

 

19.对象描述的配置

方法名 __tostring()

class My{

function __tostring ( ){

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

   }

}

$p = new My();

echo $p;

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

 

20.对象方法的异常处理

方法名 __call($funname,$arr_value)(两个下划线)

class My{

function _call($n,$v){

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

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

                                                 的时候也要就用print_r 输出

   }

}

 

21.克隆对象的应用

方法名 __clone() 

关键字  clone

class My{

function __clone( ){

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

   }

}

$a=new My()

$b=$a;

                        //内存中只有一个对象

$a=new My()

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

 

22.自动载入对象的方法

方法名 __autoload() :快速取得对象名称并自动载入进当前页面

 

该方法是在类以外单独的方法也就是我们所谓的构造函数:

function __autoload($class_n){

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

   }

  $p=new Mypc();

 

  $d=new demo();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2012-08-17 11:00  hlp鹏  阅读(178)  评论(0)    收藏  举报