电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> PHP
第1次亲密接触PHP5(1)-PHP教程,PHP基础
作者:网友供稿 点击:15
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
文章来源:phpbuilder.com
原作者:luis argerich
翻译:erquan
erquan注:本人现还未来得及体验php5,只是翻译一篇老外的文章。
以下均由erquan翻译,第1次作这些的事情希望没有误导大家。有些不准的地方请谅解。
大家看这样的行不行,如果行的话,偶就翻译完,不行就翻译了,免得误导了大家,也累哦。。。。:)
转贴时请注明文章来源,谢谢:)


php5的正式版还没发布,但我们可以学习、体验下开发版给我们带来的php新特性。
本文将集中介绍以下3大php5新功能:
* 新对象模式
* 结构化异常处理
* 名称空间

在正式开始之前,请注意:
*文章中的部分例子用php4的方法实现,只是为了增强文章的可读性
*本文所描述的新特性可能会与正式版特性有出入,请以正式版本为准。

* 新对象模式



php5新的对象模式在php4的基础上做了很大的"升级",你看起来会很像java:(。
下面的一些文字将对它做一些简单介绍,并且附有小例子让您开始体验php5的新特性
come on~~:)

* 构造函数 和 析构函数
* 对象的引用
* 克隆对象
* 对象的3种模式:私有、公共和受保护
* 接口
* 虚拟类
* __call()
* __set()和__get()
* 静态成员

构造函数 和 析构函数



在php4中,和类名一样的函数被默认为该类的构造器,并且在php4没有析构函数的概念。(二泉 注:这点和java一样)
但从php5开始,构造函数被统一命名为 __construct,而且有了析构函数:__destruct(二泉 注:这点却和delphi一样,可见php5吸收了众多的成熟的oo思想,可c可贺~~):
例1:构造函数和析构函数

<?php
class foo {
  var $x;

  function __construct($x) {
    $this->x = $x;
  }

  function display() {
    print($this->x);
  }

  function __destruct() {
    print("bye bye");
  }
}

$o1 = new foo(4);
$o1->display();
?>


运行完你将看到输出了"bye bye",这是因为类在终止的时候调用了__destruct()析构函数~~

对象的引用



正如你所知道的一样,在php4中,对一个函数或方法传递一个变量时,实际上是传递了一个copy,除非你用了传址符&来声明
你在做一个变量的引用。在php5中,对象总是以引用的方式被指定:
例2:对象的引用

<?php
class foo {
  var $x;

  function setx($x) {
    $this->x = $x;
  }

  function getx() {
    return $this->x;
  }
}

$o1 = new foo;
$o1->setx(4);
$o2 = $o1;
$o1->setx(5);
if($o1->getx() == $o2->getx()) print("oh my god!");
?>

(二泉 注:你将看到"oh my god!"的输出)

克隆对象



如上,如果有时不想得到对象的引用而想用copy时,怎么办?在php5提供的 __clone 方法中实现:
例3:克隆对象

<?php
class foo {
  var $x;

  function setx($x) {
    $this->x = $x;
  }

  function getx() {
    return $this->x;
  }
}

$o1 = new foo;
$o1->setx(4);
$o2 = $o1->__clone();
$o1->setx(5);

if($o1->getx() != $o2->getx()) print("copies are independant");
?>

克隆对象的方法在已被应用到很多语言中,所以你不必担心它的性能:)。

private, public 和 protected



在php4中,你可以在对象的外面操作它任意的方法和变量--因为方法和变量是公用的。在php5引用了3种模式来控制
对变量、方法的控制权限:public(公用的)、protected(受保护)和private(私有)

public:方法和变量可以在任意的时候被访问到
private:只能在类的内部被访问,子类也不能访问
protected:只能在类的内部、子类中被访问

例子4:public, protected and private

<?php
class foo {
  private $x;

  public function public_foo() {
    print("im public");
  }

  protected function protected_foo() {
    $this->private_foo(); //ok because we are in the same class we can call private methods
    print("im protected");
  }

  private function private_foo() {
    $this->x = 3;
    print("im private");
  }
}

class foo2 extends foo {
  public function display() {
    $this->protected_foo();
    $this->public_foo();
    // $this->private_foo();  // invalid! the function is private in the base class
  }
}

$x = new foo();
$x->public_foo();
//$x->protected_foo();  //invalid cannot call protected methods outside the class and derived classes
//$x->private_foo();    //invalid private methods can only be used inside the class

$x2 = new foo2();
$x2->display();
?>


提示:变量总是私有形式,直接访问一个私有变量并不是一个好的oop思想,应该用其他的方法来实现 set/get 的功能


接口



正如你知道的一样,在 php4 中实现继承的语法是"class foo extends parent"。无论在php4 还是在 php5 中,都不支持多重继承即只能从一个类往下继承。 php5中的"接口"是这样的一种特殊的类:它并不具体实现某个方法,只是用来定义方法的名称和拥有的元素,然后通过关键字将它们一起引用并实现具体的动作。

example 5: 接口
<?php
interface displayable {
  function display();
}

interface printable {
  function doprint();
}

class foo implements displayable,printable {
  function display() {
    // code
  }

  function doprint() {
    // code
  }
}
?>

这对代码的阅读性和理解性是非常有帮助的:读到该类时,你就知道foo包含了接口displayable和printable,而且一定有print()(二泉 注:应该是doprint())方法和display()方法。不必知道它们内部是如何实现就可轻松操作它们只要你看到foo的声明。

虚拟类



虚拟类是一种不能被实例化的类,它可以像超类一样,可以定义方法和变量。
在虚拟类中还可以定义虚拟的方法,而且在该方法也不能在该类是被实现,但必须在其子类中被实现

example 6: 虚拟类

<?php
abstract class foo {
  protected $x;

  abstract function display();

  function setx($x) {
    $this->x = $x;
  }
}


class foo2 extends foo {
  function display() {
    // code
  }
}
?>


__call()方法



在php5时,如果你定义了 __call()方法,当你试图访问类中一个不存在的变量或方法时,__call()就会被自动调用:
example 7: __call


<?php
class foo {

  function __call($name,$arguments) {
    print("did you call me? im $name!");
  }
}

$x = new foo();
$x->dostuff();
$x->fancy_stuff();
?>


这个特殊的方法被习惯用来实现"方法重载",因为你依靠一个私有参数来实现并检查这个参数:
exampe 8:  __call 实现方法重载

<?php
class magic {

  function __call($name,$arguments) {
    if($name==foo) {
      if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
      if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
    }
  }

  private function foo_for_int($x) {
    print("oh an int!");
  }

  private function foo_for_string($x) {
    print("oh a string!");
  }
}

$x = new magic();
$x->foo(3);
$x->foo("3");
?>



__set()方法 和 __get()方法



当访问或设置一个未定义的变量时,这两个方法将被调用:

example 9: __set and __get

<?php
class foo {

  function __set($name,$val) {
    print("hello, you tried to put $val in $name");
  }

  function __get($name) {
    print("hey you asked for $name");
  }
}

$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·Windows下的PHP5.0安装配制详解-PHP教程,PHP安装
·PHP在XP下IIS和Apache2服务器上的安装-PHP教程,PHP应用
·最近忙于FTP,好站多多!有好多好东东哦!不敢独享!-PHP教程,PHP基础
·PHP 5.0 Pear安装方法-PHP教程,PHP安装
·PHP开发利器-PRADO 1.6(4)-PHP教程,PHP应用
·Sun Sparc Solaris 2.6 Apache-1.3.12+MySQL-3.23.5+PHP-3.0.15 安装记-PHP教程,PHP应用
·php5学习笔记(转)-PHP教程,PHP应用
·APACHE安装笔记-PHP教程,PHP安装
·PHP.MVC的模板标签系统(四)-PHP教程,PHP应用
·PHP.MVC的模板标签系统(二)-PHP教程,PHP应用

最新文章
·PHP源码-利用 QQWry.Dat 实现 IP 地址高效检索
·Php高手带路--问题汇总解答[2]
·PHPQQ编程(2):取QQ在线状态
·php5手动最简安装方法
·福利彩票幸运号码自动生成器
·PHP开发利器-PRADO 1.6
·在Apache 服务器上启用PHP支持
·Windows2000_pro下安装Apache+PHP4+My
·php文件上传的实现
·PHP开发框架的现状和展望




版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号