您的位置:首页 > 编程语言 > PHP开发

Php面向对象01

2009-11-18 23:32 183 查看

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、 把对象串行化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: