文档章节

php4和php5区别

沉淀岁月
 沉淀岁月
发布于 2016/09/08 08:13
字数 847
阅读 11
收藏 0

PHP5 中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于 Java。本小节着重讲述 PHP5 中新的对象模式,并举了一些较简易的例子来说明。就让本节成为你的 PHP5 之旅的一个新起

  PHP5 中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于 Java。本小节着重讲述 PHP5 中新的对象模式,并举了一些较简易的例子来说明。就让本节成为你的 PHP5 之旅的一个新起点吧。:)

* 构造函数和析构函数

* 对象的引用

* 对象的克隆

* 对象中的私有、公共及受保护模式

* 接口 (Interfaces)

* 抽象类

* __call

* __set 和 __get

* 静态成员

构造函数和析构函数

  在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。

在 PHP5 中,构造函数被统一命名为 __construct,并且引入了析构函数的概念,被统一命名为 __destruct。

例一:构造函数和析构函数

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();

?>

  在上面的例子中,当你终止调用 foo 类的时候,其析构函数将会被调用,上例中会输出 “bye bye”。

对象的引用

  众所周知,在PHP4 中,传递变量给一个函数或方法,实际是把这个变量做了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号 “&” 来声明是要做一个引用,而不是一个 Copy。在 PHP5 中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作。

例二:对象的引用

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!");

?>

对象的克隆

  如上所述,当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎么办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为 __clone。

例三:对象的克隆

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");

?>

对象克隆的方法在其它很多应用程序语言中都是存在的,所以你不必担心它的稳定性。:)

对象中的私有、公共及保护模式

PHP4 中,一个对象的所有方法和变量都是公共的,这意味着你可以在一个对象的外部操作其中的任意一个变量和方法。PHP5 引入了三种新的用来控制这种存取权限的模式,它们是:公共的(Public)、受保护的(Protected)及私有的(Private)。

公共模式(Public):允许在对象外部进行操作控制。

私有模式(Private):只允许本对象内的方法对其进行操作控制。

受保护模式(Protected):允许本对象及其父对象对其进行操作控制。

© 著作权归作者所有

沉淀岁月
粉丝 27
博文 257
码字总数 91615
作品 0
朝阳
高级程序员
私信 提问
PHP版本发展历史

PHP版本发展历史 PHP1 PHP最初是作为一个快速、实用的工具包出现的。1994年,为了在自己的网站上增加一个小巧而实用的访客追踪系统,Rasmus Lerdorf编写了PHP的雏形程序。这是一个用Perl封装...

晨曦之光
2012/03/09
2.5K
0
CI等MVC框架中为什么不能有index控制器的原因

因为 类名称是index 而方法又是index,这样index函数就是php4中的构造函数,即实例化类时,直接执行这个函数而没有执行父类的构造函数,也就没有初始化CI核心类。所以会提示没有定义属性或方...

昨日今日明日
2012/12/11
0
0
PHP浮点数比较

PHP手册里有一句话:永远不要比较两个浮点数是否相等。 计算机内部处理浮点数的方式决定了浮点数不可能100%的精确,所以在处理浮点数运算时会出现精度损失问题。比如下面这段程序: [php] vi...

botkenni
2016/09/29
11
0
PHP版本VC6与VC9、Thread Safe与None-Thread Safe等的区别

转载一篇 最近发现很多PHP程序员对PHP版本知识了解不是很清楚,自己也看了不少类似的文章,还是感觉不够明确和全面,网上的结论又都是模棱两可,在此,给出最完整甚至武断的解释。 本文讲解:...

杨雨2012
2012/05/28
0
2
php ts nts v6 v9的区别

VC6:legacy Visual Studio 6 compiler,就是使用这个编译器编译的。 VC9:Visual Studio 2008 compiler,就是用微软的VS编辑器编译的 由于apache.org只提供VC6的版本,所以使用原版apache时...

mickelfeng
2012/11/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

高并发场景下的缓存有哪些常见的问题?

一、缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。 这就比较依赖缓存的过期和更新...

别打我会飞
20分钟前
1
0
List list = new ArrayList()为何父类引用指向子类对象(多态)

态:要有继承,方法的重写,父类引用指向子类对象 疑问一:父类引用指向子类对象 与指向父类对象 Animal cat = new Cat(); //向上转型。 父类引用指向子类对象,该引用不能再访问子类新增加的...

architect刘源源
20分钟前
0
0
分而治之-快速排序

快速排序的思想: 快速排序首先在数组中确定1个枢纽项(比如数组中的第一个元素),将大于该枢纽项的元素放到右侧,小于该枢纽项的元素放到左侧,这样枢纽项将数组划分成两部分。接着继续对划...

万山红遍
今天
4
0
Qt编写自定义控件9-导航按钮控件

前言 导航按钮控件,主要用于各种漂亮精美的导航条,我们经常在web中看到导航条都非常精美,都是html+css+js实现的,还自带动画过度效果,Qt提供的qss其实也是无敌的,支持基本上所有的CSS2属...

飞扬青云
今天
3
0
Python开发工具:pyJasper

原文:https://www.oschina.net/p/pyjasper 前言 pyJasper是 JasperReports 网络服务器的 Python 客户端。 pyJasper 是一组 Python 基础工具,可以用来处理 JasperReports 报表 。因为 Jasper...

A_裙232550246
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部