Php面向对象01

 

Php面向对象

面向对象程序设计方法的主要思路是建立一系列类,并定义他们的静态属性和动态行为。

 

简而言之,面向对象思想的精髓包括以下内容:

1)、面向对象的系统是由对象组成的OBJECT

2)、把所有对象都划分成各种类Class ,每个类都定义了一组静态属性和动态方法。

3)、对象之间通过传递消息message互相联系,驱动整个系统的运营。

 

1.1、理解类和对象

类是具有相同或相似结构、操作和约束规则的对象组成的集合。

对象是某一类的具体实例,每一个类都是具有某些共同特征对象的抽象。

 

类和对象的关系:

是抽象和具体的关系。

在构造类时,是要把一组数据和操作封装称为一体,可以把类理解为抽象数据类型。

 

类的属性和方法:

类的属性是客观世界实体性质的抽象,而方法是实体所能执行的操作。对象相互作用的机制是发送消息,一个消息由三部分组成:

1)、接收消息的对象:发送给谁

2)、消息名:需要对象做什么

3)、消息参数:提供对象方法所需的信息。例如,如果想使一个学生长大一岁,则可以对其发送消息、

S1->长大(1);

 

对于对象,它只提供了一些服务接口,而把现实细节对外界隐藏起来了,这称为封装。

封装的机制提高了对象的独立性,并确保只能通过向对象发送消息来改变对象,而不能直接到对象内部区改变他。

 

 

用继承来重用代码:

继承的本质是代码重用

简单说,继承是指一个类能够直接获得父类已有的性质或特征,而不必重复定义他们。很显然,继承具有传递性。

 

 

用多态来统一对外:

多台的本质:当通过传递消息使一个对象执行某个方法时,对象能根据所得到的参数决定调用哪个方法。

 

多态使对象有统一的对外接口,并可以根据不同的情况去做不同的动作。

实现多态性的重要方法是重载。重载的实现是对类中已有的同名方法重新定义,即在一个类中重复定义多个同名而不同参数的方法。

 

1.2、PHP中使用类

1.2.1 创建类和对象

类的创建需要完成其3个要素:类名、属性和方法。在PHP中,使用class关键字创建一个类。

Class classs_name

{

  //属性


 

Var $var_1;

Var $var_2;

Var $var_m;

 

//方法

Function method_1(…){…}

Function method_2(…){…}

….

} //class_name

 

类的声明必须使用关键字class,其后面试类的名称class_name,然后是用一堆大括号{}来标识类的开始和结束。在类的内部包括以下两个部分:

1、  属性:用关键字var定义的属性

2、  方法:用关键字function定义类的方法。

 

调用属性和方法:

只需要”->”操作符就可以使用,其左边是类对象名,右边是属性或方法。

 

注意:若在类的内部的实现中使用类自身的属性和方法,需要在”->”属性或方法前加$this关键字,表明使用的事自身成员。而此时属性前不再有”$”.

 

 

PHP中用关键字new来创建一个类的对象。

$object_name = new class_name;

例如:

Student_class.php

<?php

/*

 * Created on 2009-11-16

 *

 * To change the template for this generated file go to

 * Window - Preferences - PHPeclipse - PHP - Code Templates

 */

 class student

 {

    //属性

    var $no;

    var $name;

    var $gender;

    var $age;

   

    //方法

    function set_data($arr)

    {

       $this->no=$arr["no"];

       $this->name=$arr["name"];

       $this->gender=$arr["gender"];

       $this->age=$$arr["age"]  ;

    }

   

    function grow($i)

    {

       $this->age+=$i;

    }

    function get_data()

    {

       echo "学生信息:";

       echo $this->no;

       echo $this->name;

       echo $this->gender;

       echo $this->age;

    }

 }//class student

 

 $s = new student;

 $temp_arr=array("no"=>"001","name"=>"孙海伟","age"=>"26","gender"=>"boy");

 $s->set_data($temp_arr);

 $s->get_data();

 $s->grow(1);

 $s->get_data();

 

?>

 

$this->  表示使用类本身的属性。

 

 

1.2.2 使用构造函数

PHP4以及以前的版本中,在类中创建与类同名的函数即为构造函数,构造函数可以带参数,也可以不带参数。

 

每实例化一个对象时都会执行这个函数。与类同名的函数。

<?php

/*

 * Created on 2009-11-17

 *

 * To change the template for this generated file go to

 * Window - Preferences - PHPeclipse - PHP - Code Templates

 */

 class student{

    var $no;

    var $name;

    var $gender;

    var $age;

   

    function student($pname){

       $this->name=$pname;

    }

 }//class student

 

 $s1=new student("张三");

 echo "学生姓名:".$s1->name."<br>";

 $s2=new student("李四");

 echo "学生姓名为: ".$s2->name."<br>";

?>

 

 

继承已有的类:

继承是面向对象的特征之一。在Php中使用extends关键字实现继承,这个和JAVA风格一致。

Class child_class extends parent_class

{

   Var $new_property;

….

Function $new_method(){}

….

}

 

重载新的方法:

Function set_data($arr)

{

  $this->no=$arr[“no”];

$this->department=$arr[“department”];

}

 

 

访问父类中的方法

Parent::

Function set_data($arr)

{

Parent::set_data($arr);

$this->department=$arr[“department”];

}

 

Function get_data()

{

   Parent::get_data();

Echo “所在系:”.$this->department;

}

 

 

 

PHP5面向对象新特征:

1、  控制访问权限

|-public 可以被毫无限制的访问,类外部的任何代码都可以读写public属性,

|-private 只在类的内部可见。类中的任何成员和类的实例都可以访问private成员。但在类的外面不能改变或读取privtate属性值,也不能调用private方法,所继承的子类也不能访问父类的private成员。

|-protected 能被同类中的所有方法和继承出的类的 所有方法访问,除此之外,不能被访问了。

<?php

/*

 * Created on 2009-11-17

 *

 * To change the template for this generated file go to

 * Window - Preferences - PHPeclipse - PHP - Code Templates

 */

 class student{

    private $no;

    private $name;

    private $gender;

    private $age;

   

    private function show_age()

    {

       echo $this->age;

    }

   

    public function ask_age()

    {

       $this->show_age();

    }

   

    function set_data($arr)

    {

       $this->no=$arr["no"];

       $this->name=$arr["name"];

       $this->gender=$arr["gender"];

       $this->age=$arr["age"];

      

    }

   

 }

 

 $s1= new student;

 $temp_arr=array("no"=>"002","name"=>"sdf","gender"=>"nv","age"=>23,"department"=>"物理系");

 $s1->set_data($temp_arr);

 echo $s1->age; //error

 echo $s1->show_age(); //error

 $s1->ask_age();

?>

 

 

一般,总是把类的属性定义为private,但是对于属性的读取非常频繁,php5中,预定义了__get()__set()来获取和赋值其属性。

Function __get($property_name)

{

   If(isset($this->property_name))

{  return $this->property_name; }

      Else

        { return (NULL); }

}

 

Function __set($property_name,$value)

{

  $this->property_name=$value;

}

 

 

 

 

2、  静态属性和方法

 

 

所于类的属性,而非对象的属性。在面向对象中,称之为静态属性。

Php中使用static关键字来定义静态属性和方法,但不能用this来引用静态变量或方法,而需要用self这个特殊的类。

 

对静态属性和方法,也不能再对象中用this来引用,在类内部引用,需要使用特殊的类self::  , 在类的外部引用,则需要类名+”::”

 

3、  使用__construct__destruct()

4、  使用__clone()克隆对象

5、  使用抽象方法和抽象类

6、  使用__call()处理调用错误

7、  使用__autoload() 自动加载类

8、  把对象串行化

 

你可能感兴趣的:(Php面向对象01)