php5.0说明——为面向对象而生的php5

php5.0说明 ——为面向对象而生的php5 为面向对象而生的php5 ——————————————— [摘要]目前开发中的php5,其面向对象的机能已经被大幅度的强化了。下一代的php将会是怎样的一种语言呢?下面我们来详细讲解一下目前发布的php5的beta release。 (一) zend 2.0的诞生 现在的php4所使用的基本文法是被称之为zend 引擎的脚本编译引擎。这个就是php4的优良机能的原因之一,是作为对php3的改进而生成的一种语言。大家一直认为,php4的性能根据当初的目标,比php3有了很大的提升,在网络编程的世界里占据了很大的份额。 开发了zend 引擎的zend公司是在开发php4的同时,由php3的主要开发者zeev suraski和andi gutmans所创立的企业合并而来的。zend的名称是由zeev和andi的名字合起来组成的。zend公司的商业模式是,持续不断的为open source提供zend 引擎的php内核 (core),同时提升周边产品开发和贩卖的利益。以open source software作为基盘的商业,在世界范围内大多数正在苦战的企业中,算是比较好的典型例子了。 ■php4的局限 托php4成功的福,这个用途的适用范围逐渐变广起来。作为企业级的用途而使用php的说法时有所闻。因此,就有了这样一个问题,构筑大规模网站的时候,代码的再利用性十分差。具体来说就是,php4的面向对象性能很弱,因此习惯于使用java等的技术人员对此有很多的抱怨。 逐步的改善php4的面向对象的性能,大幅度的更改基本文法,开发者达成了更新php记述方法的开拓目的。 ■zend 2.0开始开发 随后,zend公司php中心的开发者们在2001年7月发表了作为下一代php语言引擎的zend 2.0引擎的构想。以[zend engine version 2.0: feature overview and design] (http://www.zend.com/engine2/zendengine-2.0.pdf)作为目标的同时,面向对象的性能大幅度的强化了。 目前的php4 zend 引擎的扩张情况与昔日的php3如出一辙。这就意味着,要提升新的语言引擎的主版本号,明确方法目标,迎接来自开发团体的称赞。 ze2的开发,与以往的zend引擎一样,都是运行在open source的模式下的。最新的源代码在cvs上被全面的公开,因为是面向开放的开发者的,关于开发的议论非常的活跃。 现在ze2被决定采用于php的下一个版本php5中。最终发布的时间现在还未定,但是假如根据zend公司2003年4月1日发布的newsletter的话,现在的应该就是beta release了。 (二) php5的新特性 接下来请按照顺序看一下被强化的php5的性能。首先是最为重要的面向对象性能,类的实体特性在大幅度的被修改着。这里说的仅是关于类的新特性。 · 对象的参照过渡是默认的(default) · 引入访问属性的限制 · 引入访问方法的限制 · 抽象类和抽象方法 · 接口 · final声明 · 名空间 · 类内常量 · 类变量 · 统一构建器 · 析构函数(distructor) · 其他附属特性 以上内容是根据2003年4月22日cvs上登录版本资料所写的,在正式的发布之前,也有变动的可能性。 ■对象的默认参照过渡 在php4中,在以变量$var1为类的实体对象的时候,如果$var2 = $var1;那么,在$var2中,$var1的复制被代入。明显的,$var2为了指向与$var1相同的对象,就要写成$var2 =& $var1,必须要加上&作为参照。 而在php5,对象的代入将成为自动的参照过渡。也就是说, $var2=$var1,两者指向相同的对象。如果想要同php4一样,带入copy,那么就会运用到导入__clone()的方法。 $var2 = $var1->__clone();此处,clone前面是两个连续的“_” (这仅仅是类的实体的特性) ■引入访问属性的限制 在php4的类中,连同属性和方法在内,可以自由的访问类的内外任何地方,而没有限制。因此,用户就无法防范属性的无意中的更改。 而在php5中,同c++和java一样,导入了private, protected, public三个等级的访问限制,使得类的设计者能够对属性和方法的使用方法进行限定。以下是各种访问限制的意思。 · public: 可以自由的在类的内外任何地方进行参照、变更 · private: 只能在这个类的方法中进行参照、变更 · protected:能够在这个类以及继承了这个类的另一个类的方法中进行参照、变更。另外,在继承的类中,能够写入访问指定。 在php4中的“var”,同以往一样与public有着相同的意思。下面就来举一个例子,让我们来看看访问限制是怎样起作用的。 php代码:——————————————————————————– class hoge1 {  private $var1 = a;  protected $var2 = b;  protected $var3 = c;  function setlower() {   $this->var1 = a;   $this->var2 = b;   $this->var3 = c;  }  function var1() {   return $this->var1;  }  function var2() {   return $this->var2;  }  function var3() {   return $this->var3;  } } ——————————————————————————– 在这个类中,带有$var1, $var2, $var3三个属性。$var1被声明为private, $var2和$var3是protected.在此处 php代码:——————————————————————————– $hoge=new hoge1; echo’var1:’.$hoge->var1.” n” ——————————————————————————– 如果尝试参照不允许从外部进行访问的private属性,那么就会出现如下错误: fatal error: cannot access private property hoge1::$var1 in /path/to/script.php on line xx 对于protected的$var2也是相同的。 但是,因为$hoge的方法是没有private和protected的,所以下面的代码能够正常运作,返回内部私有和保护变量的值。 php代码:——————————————————————————– echo var1: . $hoge->var1() . ”
“; // var1: a echo var2: . $hoge->var2() . ”
“; // var2: b echo var3: . $hoge->var3() . ”
“; // var3: c $hoge->setlower(); echo var1: . $hoge->var1() . ”
“; // var1: a echo var2: . $hoge->var2() . ”
“; // var2: b echo var3: . $hoge->var3() . ”
“; // var3: c ——————————————————————————– 其次,为了能够看到protected的属性的状态,我们试着创造了继承了hoge1的类hoge2 php代码:——————————————————————————– class hoge2 extends hoge1 {  public $var3 = 3;  function d_var1() {   return $this->var1;  }  function d_var2() {   return $this->var2;  }  function d_var3() {   return $this->var3;  } } ——————————————————————————– 在类hoge2中,只有$var3被声明为public。在属性是protected的情况下,从子类进行访问有何种限制,是由子类的属性声明决定的。在hoge2中,因为$var3被声明是public,因此无论是从何处都可以访问hoge2的$var3(实体是hoge1的$var3)。因为$var1在hoge1中是private,因此,在hoge2子类中hoge1的$var1不会被继承,而在hoge2中有可能会做出名为$var1的属性,因此,必须要明确区分hoge1::$var1和hoge2::$var1。 php代码:——————————————————————————– $hoge = new hoge2; echo var1: . $hoge->var1 . ”
“;   // var1: // echo var2: . $hoge->var2 . ”
“;  // error echo var3: . $hoge->var3 . ”
“;   // var3: 3 echo var1: . $hoge->d_var1() . ”
“; // var1: echo var2: . $hoge->d_var2() . ”
“; // var2: b echo var3: . $hoge->d_var3() . ”
“; // var3: 3 ——————————————————————————– $hoge->var1是与hoge1::var1没有关系的变量,因此不会有任何显示,因为var2有protected访问限制,所以如果不通过method就直接参照$var2,就会出现致命错误。 ■引入访问方法的限制 与上述相同,此处也分为private, protected, public三种。 · public: 能够从任何地方调用 · private: 只能够从这个类的method内调用 · protected: 只能够从这个类以及subclass的method中调用 此处的意思同java和c++相同,请不要搞混。 ■抽象(abstract)的类和抽象的方法 支持与java相同的抽象类和抽象方法。抽象方法只提供了方法名的调用方式,而没有提供实体。另外,持有抽象方法的类,必须抽象宣言类本身。如果想要直接作成抽象类的对象,那么就会出现如下的致命错误。 fatal error: cannot instantiate abstract class classname 产生错误的实际的例子如下所示: php代码:——————————————————————————– abstract class myabstract {  abstract public function test();  public function test2() {   echo “myabstract::test2() called.
“;  } } class myimplement extends myabstract {  public function test() {   echo “myimplement::test() called.
“;  } } $obj = new myimplement; $obj->test(); ?> ——————————————————————————– ■接口(interface) 支持与java相同的接口(interface)。接口是适合所描述的外部调用形式而设计组合起来的。 接口的实体不能够记录。相反的,实现接口的类必须持有与这个接口的方法相对应的实体。另外,类能够实现多个接口,因此,有可能实现多重继承。 php代码:————————————————————-

http://www.bkjia.com/phpjc/532145.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/532145.htmltecharticlephp5.0说明 ——为面向对象而生的php5 为面向对象而生的php5 ——————————————— [摘要]目前开发中的php5,其面向对象的机能已…

Posted in 未分类