class ==> 封装
class Student
{
var $sName;
function setName($theName)
{//must use this to "USE" member var;
//$sName = $theName;
this->x = $theName;
}
function getName()
{
return $this->x;
}
}
//
$s = new Stuend;
$s->setName("william");
echo $s->getName;
//=================
class 不支持 private
所以: $s->sName 也是对的,但是这样就违背了面向对象的思想。、
//=====
继承用 extends
class BigStudent extends Student
{
var $sAddress;
die function BigStudent($temp)
{
$this->x = $temp;
$this->Student();
}
function setAddress($Name="yourName",$address="wenZhou")//缺省
{
this->sAddress = $address;
}
function getAddresss()
{
return this->sAddress;
}
}//如果子类中包含了与父类中一样名称的函数名,那么它将“隐藏”基类的数据成员
bs = new BigStudent;
bs->setName(william);
bs0>setAddress("ShangHai pudong....");
bs = new BigStudent("");
bs = new BigStudent("dick");
bs = new BigStudent("dick","shanghai");
//==================
抽象类,不可被继承,只能提供接口。 而保证子类拥有预定的功能。
die,的方法,必须被重写,不然会报错。 基类不被程序员看到,是个很好的设计方法。
只要将接口打印出来做他们的工作就可以了
//====================
不支持析构函数,不支持重载
// PHP 是一种松散类型的语言
通过类型重载不起作用,然而通过参数的个数不同来重载也不起作用。
==============================
有时在OOP中重载构造函数非常好,这样你可以通过不同的方法创建对象(传递不同数量的参数)。在PHP
中实现它的技巧是:
//===============================================
class Myclass {
function Myclass() {
$name="Myclass".func_num_args();
$this->$name();
//注意$this->name()一般是错误的,但是在这里$name是一个将被调用方法的名字
}
function Myclass1($x) {
code;
}
function Myclass2($x,$y) {
code;
}
}
//===========================================
?>
//========================================
多态。就是通过传进来的参数来,确的调用哪个类的方法。 动态绑定调用的。
function nicePic($obj)
{
$obj->draw();
}
根据构建的类别对象来,识别调用不同的draw()方法。
//
Php是个混合语言。 不是一个真正的面向对象的语言。
大型项目,你可能想/需要在PHP 中使用 纯的OOP去声明类,而且在你的项目只用对象和类。
随着项目越来越大,使用OOP可能会有帮助,OOP代码很容易维护,容易理解和重用。
这些就是软件工程的基础。在基于web的项目中应用这些概念就成为将来网站成功的关键。
//-----------------------------------
序列化(Serializing)
PHP不支持永久对象,但可以用 序列化机制 去完成
序列化方法可以返回对象的字符串表示。然而,序列化只保存了对象的成员数据而不包话方法。
//-------------------
如果你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象到$obj,你可以继续
使用对象的方法!我不建议这样去做。 因为不标准
//====================
总而言之,PHP 进行序列化对于保存对象的成员变量非常有用
$obj=new Classfoo();
$str=serialize($obj);
//保存$str到磁盘上
//几个月以后
//从磁盘中装入str
$obj2=unserialize($str)
?>---------------------------------------------------
//现在没有完全序列化的功能,希望以后有。
//========================
//=============================
//==================================
使用类进行存储数据 ??
所以假设你创建了一个"Universe"的类,并且强制所有的类都必须从universe扩展,你可以在universe
中定义一个clone的方法,如下:
-----------------------------------------------------
class Universe {
function clone() {
$herring=serialize($this);
$vec=explode(':',$herring);
$nam=str_replace("/"",'',$vec[2]);
$ret=new $nam;
return $ret;
}
}
//然后
$obj=new Something();
//从Universe扩展
$other=$obj->clone();
?>---------------------------------------------------
From: www.linux163.com