首页 技术教程 实用代码 注册破解 正则表达式 网址导航 电子书籍

PHP 5.0对象模型深度探索之属性和方法

  一个对象实例的属性是变量,就像PHP的其他变量一样。但是你必须使用->运算符来引用它们。不需要在属性前使用美元符$。   可以联用->,如果一个对象的属性包含了一个对象,你可以使用两个->运算符来得到内部对象的属性. 你甚至可以用双重引用的字符串来放置这些表达式. 下面的例子中,对象House中的属性room包含了一组Room对象。   访问方法和访问属性类似。->运算符用来指向实例的方法. 在下面的中调用getLastLogin就是。方法执行起来和类外的函数几乎相同.   如果一个类从另一类中继承而来,父类中的属性和方法将在子类中都有效,即使在子类中没有声明. 像以前提到过的,继承是非常强大的. 如果你想访问一个继承的...
类别:网页编程 - PHP技术    查看:122    更新:2014-05-19

在PHP中养成7个面向对象的好习惯

通过面向对象的方式改进 PHP 应用程序 如果您尚未打算用 OO 原则创建应用程序,则使用 PHP 的面向对象(OO)的语言特性,这 7 个习惯将帮助您开始在过程编程与 OO 编程之间进行转换。 在 PHP 编程早期,PHP 代码在本质上是限于面向过程的。过程代码 的特征在于使用过程构建应用程序块。过程通过允许过程之间的调用提供某种程度的重用。 但是,没有面向对象的语言构造,程序员仍然可以把 OO 特性引入到 PHP 代码中。这样做有点困难并且会使代码难于阅读,因为它是混合范例(含有伪 OO 设计的过程语言)。使用 PHP 代码中的 OO 构造 — 例如能够定义和使用类、能够构建使用继承的类之间的关系以及能够定...
类别:网页编程 - PHP技术    查看:105    更新:2014-05-19

php面向过程与面向对象的简单比较

最近打开我以前做的一个项目,系统结构中使用了4个包含文件对登录用户的权限进行判断,属典型的面向过程写法,可能很多朋友以前都写过这样的代码。我把这些代码整理了一下,写成一个权限判断的简单类,以比较一个面各对象和面向过程之间的差异。   代码如下(其中省略了部分代码)。   sesson1.php   <?php/** 功能:取得用户的cookie,以判断用户是否已经登录,并是否具有系统管理员权限* 程序员:xiangli* 日期:2002-07-19*/$UserName = $HTTP_COOKIE_VARS['UserName1'];//用户名if ( empty($UserName) || $HTTP_COOKIE_VARS['Level']&nb...
类别:网页编程 - PHP技术    查看:71    更新:2014-05-19

PHP程序61条面向对象分析设计的经验原则

你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。 (1)所有数据都应该隐藏在所在的类的内部。  (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。  (3)尽量减少类的协议中的消息。  (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。  (5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。  如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。  (6)不要以用户无法使用或不感兴趣的东西扰...
类别:网页编程 - PHP技术    查看:76    更新:2014-05-19

PHP5.0对象模型探索之抽象方法和抽象类

面向对象程序通过类的分层结构构建起来,在单重继承语言如PHP中,类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类。当然,可能存在多个根类,用来实现不同的功能。在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用。如果我们的应用代码被设计成与根类一起工作,那么它也可以和任何一个从根类继承出来的子类合作。    抽象方法是就像子类中一般的方法的占位符(占个地方但不起作用),它与一般方法不同—没有任何代码。如果类中存在一个或更多抽象方法, 那么这个类就成了抽象类。你不能实例化抽象类. 你必须继承它们,然后实例化子类,你也...
类别:网页编程 - PHP技术    查看:88    更新:2014-05-19

PHP中的串行化变量和序列化对象

串行化大概就是把一些变量转化成为字符串的字节流的形式,这样比较容易传输、存储。当然,关是传输存储没有什么,关键是变成串的形式以后还能够转化回来,而且能够保持原来数据的结构。   在PHP中有多串行化处理的函数:serialize(),该函数把任何变量值(除了资源变量)转化为字符串的形式,可以把字符串保存到文件里,或者注册为Session,乃至于使用curl来模拟GET/POST来传输变量,达到RPC的效果。   如果要将串行化的变量转化成PHP原始的变量值,那么可以使用unserialize()函数。   一、变量串行化   我们举简单的例子来说明串行化,以及它的存储格式。   整型:   $var = 23;   echo serialize($var);...
类别:网页编程 - PHP技术    查看:102    更新:2014-05-19

PHP5.0对象模型深度探索之定义一个类

  当你声明一个类,你需要列出对象应有的所有变量和所有函数—被称为属性和方法。列表1中显示了一个类的构成. 注意在大括号({})内你只能声明变量或者函数。列表2中显示了如何在一个类中定义三个属性和两个方法。  列表1class Name extends Another Class {  Access Variable Declaration  Access Function Declaration }    列表2//定义一个跟踪用户的类 class User {  //属性  public $name;  private $password, $lastLogin;  //方法  public function __construct($name, $password)  {   $this->name = $name;   $this->password = $password;   $this->lastLogin = time();   $this->access...
类别:网页编程 - PHP技术    查看:98    更新:2014-05-19

两种php调用Java对象的方法

1.php的Java模块    php发布版中包含一个Java扩展模块,可以用来调用Java对象,例如:    <?php    $system=new Java("java.lang.System");    print "Java version=".$system->getProperty("java.version")."    ";    ?>    2.minij2ee应用服务器SJOP协议实现    minij2ee应用服务器实现SJOP协议的主要目的是使php中能够访问EJB企业级组件,因此minij2ee提供了一个EJB-PHP编译器,可以把EJB组件编译成php的类,使php程序中能够方便的调用EJB组件,例如:&nb...
类别:网页编程 - PHP技术    查看:60    更新:2014-05-19

PHP数据库操作面向对象的优点

我们都知道如何从Mysql获取我们需要的行(记录),读取数据,然后存取一些改动。很明显也很直接,在这个过程背后也没有什么拐弯抹角的。然而对于我们使用面对对象的程序设计(OOP)来管理我们数据库中的数据时,这个过程就需要大大改进一下了。这篇文章将对如何设计一个面对对象的方式来管理数据库的记录做一个简单的描述。你的数据当中的所有内部逻辑关系将被封装到一个非常条理的记录对象,这个对象能够提供专门(专一)的确认代码系统,转化以及数据处理。随着Zend Engine2 和PHP5的发布,PHP开发者将会拥有更强大的面对对象的工具来辅助工作,这将使这个过程(面对对象地管理数据库)更有吸引力。   以下列出...
类别:网页编程 - PHP技术    查看:86    更新:2014-05-19

在数据库中使用对象的好处

我们都知道如何从Mysql获取我们需要的行(记录),读取数据,然后存取一些改动。很明显也很直接,在这个过程背后也没有什么拐弯抹角的。然而对于我们使用面对对象的程序设计(OOP)来管理我们数据库中的数据时,这个过程就需要大大改进一下了。这篇文章将对如何设计一个面对对象的方式来管理数据库的记录做一个简单的描述。你的数据当中的所有内部逻辑关系将被封装到一个非常条理的记录对象,这个对象能够提供专门(专一)的确认代码系统,转化以及数据处理。随着Zend Engine2 和PHP5的发布,PHP开发者将会拥有更强大的面对对象的工具来辅助工作,这将使这个过程(面对对象地管理数据库)更有吸引力。 以下列出了一些使用对象来描叙你...
类别:数据库 - MySQL    查看:86    更新:2014-05-19

FileSystemWatcher对象监控C#目录改变

许多情况下,如果创建或修改一个文件,系统需要执行某些任务。例如,在一个数据库中插入平面文件的重要系统就是如此。 在这种情况下,程序必须监控目录中新建立的文件。如果目录中新建了一个文件,程序必须提取这个文件、进行解析、再把它插入到数据库中。许多时候,这类功能要通过“调查”目录并列举上次调查后任何新建的文件来完成。在.NET Framework中,微软为开发者提供另一种连续调查一个目录中的新建文件的方法——FileSystemWatcher对象。FileSystemWatcher对象为你完成目录监控工作。如果新建、更新或删除一个文件,FileSystemWatcher将提交一个事件,通知你发生了一项改变。这样,新建一个文件后,你的...
类别:程序开发 - C#/.NET    查看:110    更新:2014-05-17

C#3.0 新特性之对象构造者

C#3.0中加入的对象构造者特性,使得对象的初始化工作变得格外简单,我们可以采用类似于数组初始化的方式来初始化类的对象,方法就是直接在创建类对象的表达式后面跟上类成员的初始化代码。 以前我们在声明数组时,可以同时对其进行初始化,这样就省去了很多麻烦,但是在创建类的对象时,这招可就不灵了,我们要么调用该类的构造函数完成对象的初始化,要么就手工进行初始化。这两种方法都不太方便,使用构造函数来对对象进行初始化时,我们为了某种灵活性,可能需要编写构造函数的多个重载版本,实在是麻烦。具体示例如下:class Point { public int X { get; set; } public int Y { get; set; } public override string ToString() { retu...
类别:程序开发 - C#/.NET    查看:85    更新:2014-05-17

面向对象编程:Java的简单数据类型

数据类型数据类型就是对内存位置的抽象表达。程序员可以利用多种数据类型:某些由编程语言定义,某些由外部库定义,还有些则由程序员来定义。很多编程语言都依赖于特定的计算机类型和对数据类型属性的具体编译实现,比如word和integer数据类型的大小等。另一方面,Java的虚拟机负责定义其内置数据类型的各方面内容。这就意味着不管Java虚拟机(JVM)运行在何等低级的操作系统之上,数据类型的属性都是完全一样的。 简单数据类型 简单数据类型是不能再简化的、内置的数据类型,由编程语言定义,表示真实的数字、字符和整数。更大、更复杂的数据类型可以采用简单数据类型的组合来定义。在大多数情况下,简单数据类型都具有其硬件等价...
类别:程序开发 - JAVA    查看:110    更新:2014-05-16

面向对象编程:Java复杂数据类型用法

同简单数据类型的定义一样,Java虚拟机(JVM)还定义了索引(reference)这种数据类型。索引类型可以“引用”变量,由于Java没有明确地定义指针类型,所以索引类型可以被认为就是指向实际值或者指向变量所代表的实际值的指针。一个对象可以被多于一个以上的索引所“指”。JVM从不直接对对象寻址而是操作对象的索引。索引类型分成三种,它们是:类(class)、接口(interface)和数组(array)。索引类型可以引用动态创建的类实例、普通实例和数组。索引还可以包含特殊的值,这就是null 索引。null 索引在运行时上并没有对应的类型,但它可以被转换为任何类型。索引类型的默认值就是null。类类(Class)指的是定义方...
类别:程序开发 - JAVA    查看:103    更新:2014-05-16

JAVA对象群体的组织:Enumeration及Iterator类

在一般情况下,遍历集合类会使用一下方式: for(int i=0;i<v.size();i++) Customer c=(Custormer)v.get(i); 使用Enumeration类和Iterator类可以简化这个过程 1.Enumeration类 (权举) 使用范围:Vector类 方法: boolean hasMoreElement() //测试此枚举是否包含更多的元素. Enumeration nextElement() //如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。 使用举例: Enumeration e=v.enumeration(); while(e.hasMoreElement()) Customer c=(Customer)e.nextElement(); //注意:使用Enumeration同样需要对元素进行显式转换 缺点:在遍历过程中删除元素效果,原因唔系好清楚,所以建议使用Iterator类的r...
类别:程序开发 - JAVA    查看:93    更新:2014-05-16

Java对象群体的组织:向量Vector

向量的功能: 1.能存储任意对象 2.不能存储基本类型的数据,如39,除非将这些数据包裹在包裹类中 3.其容量可以按需求自动扩充 4.若果不用扩充容量,增加元素方法的效率较高 方式: Vector myVector=new Vector() //初始容量为10 Vector myVector=new Vector(int cap) // 初始容量为cap Vector myVector=new Vector(Collection col) //使用集合col的元素初始化,若果col为数组,需要先将数组转换成为List对象 例:Vector myVector=new Vector(Arrays.asList(col)); void add(Object obj) //将给定的参数对象加入到Vector的原有元素的最后 boolean addAll(Colletion col) //将集合类对象中的所有元素加入到此方法的接收者对象中,...
类别:程序开发 - JAVA    查看:92    更新:2014-05-16