- 浏览: 424946 次
- 性别:
- 来自: 深圳
最新评论
-
fufu0414:
PHP类实例教程:abstract类和abstract方法 -
fufu0414:
[list][url][img][img][img][list ...
PHP类实例教程:abstract类和abstract方法
文章列表
多态这个概念,在Java中指的是变量可以指向的对象的类型,可是变量声明类型的子类。对象一旦创建,它的类型是不变的,多态的是变量。在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、 ...
抽象类实现接口,可以不实现其中的抽象方法,而将抽象方法的实现交付给具体能被实例化的类去处理。
<?php
interface User
{
function getName();
function setName($_name);
}
//此处只是实现了一个接口的一个方法
abstract class abatractNormalUser implements User
{
protected $name;
function getName() {
return $this->name;
}
}
//这里实现了接口的另外一个方法
class Nor ...
PHP是弱类型语言,向方法传递参数时候也不太区分类型。这样的使用会引起很多的问题,PHP开发者认为,这些问题应该是由代码书写者在书写代码时进行检验以避免。没有类型提示很危险。
<?php
class NormalUser
{
/*
* 其它相关代码..省略........
*/
private $age;
public function setAge($_age) {
$this->age = $_age;
}
public function getAge() {
return $this->age ;
}
}
$nor ...
一个接口可以继承自另外的接口。PHP5中的类是单继承,但是接口很特殊。一个接口可以继承自多个接口。
一个接口继承其它接口时候,直接继承父接口的静态常量属性和抽象方法。
在PHP5中,接口是可以继承自另外一个接口的。这样代码的重用更有效了。
要注意只有接口和接口之间使用 继承关键字extends。
类实现接口必须实现其抽象方法,使用实现关键字 implements。
接口实现继承
要注意只有接口和接口之间使用 继承关键字extends。
类实现接口必须实现其抽象方法,使用实现关键字 implements。
这个例子定义接口User,User有两个抽象方法getName和setNa ...
类实现接口要使用 implements 。类实现接口要实现其中的抽象方法。一个类可以实现多个接口。
一个类可以使用 implements 实现接口,甚至可以实现多个接口。
大部分的书说,这样是为了实现PHP的多继承。为什么呢?
PHP5是单继 ...
接口(interface)是抽象方法和静态常量定义的集合。
接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。
接口中没有其它类型的内容。
接口的定义
我们先写接口的定义,后面几节再介绍接口的意义。
下面的例子是接口的一个简单写法。
<?php
interface 接口名
{
}
?>
下面的例子定义了一个接口 User ,这个接口中有两个抽象方法,getName() 和setName()。能看到接口的写法和类很相似。
<?php
interface User
{
function setName($name);
func ...
抽象类的应用就是典型的模版模式,先声明一个不能被实例化的模版,在子类中去依照模版实现具体的应用。
模版模式实例
我们写这样一个应用:
银行计算利息,都是利率乘以本金和存款时间,但各种存款方式计算利率的方式不同,所以,在账户这个类的相关方法里,只搭出算法的骨架,但不具体实现。具体实现由各个子类来完成。
<?php
//程序设计模式的模块部分
abstract class LoadAccount
{
//利息,本金
protected $interest, $fund;
public function calculateInterest() {
//取得利率
...
可以使用abstract来修饰一个类或者方法。
用abstract修饰的类表示这个类是一个抽象类,用abstract修饰的方法表示这个方法是一个抽象方法。
抽象类不能被实例化。
抽象方法是只有方法声明,而没有方法的实现内容。
abstract 抽象类
可以使用abstract来修饰一个类。
用abstract修饰的类表示这个类是一个抽象类。
抽象类不能被实例化。
这是一个简单抽象的方法,如果它被直接实例化,系统会报错。<?php
//定义一个抽象类
abstract class User
{
public function __toString() {
r ...
在PHP5类中继续使用cons修饰常量。我们使用const定义一个常量,定义的这个常量不能被改变。在PHP5中const定义的常量与定义变量的方法不同,不需要加$修饰符。 const PI = 3.14; 这样就可以。
而使用const 定义的常量名称一般都大写,这是一个约定,在任何语言中都是这样。
如果定义的常量由多个单词组成,使用 _ 连接,这也是约定。
比如, MAX_MUMBER 这样的命名方式。一个良好的命名方式,是程序员必须注意的。
类中的常量使用起来类似静态变量,不同点只是它的值不能被改变。我们使用类名::常量名来调用这个常量。
<?php
//声明一个f ...
final---用于类、方法前。
final类---不可被继承。
final方法---不可被覆盖。
final类不能被继承。
如果我们不希望一个类被继承,我们使用final来修饰这个类。
于是这个类将无法被继承。
比如我们设定的Math类,涉及了我们要做的数学计算方法,这些算法也没有必要修改,也没有必要被继承,我们把它设置成final类型。
<?php
//声明一个final类Math
final class Math
{
public static $pi = 3.14;
public function __toString() {
return &q ...
单件模式要解决的问题就是“如何让这个类只有一个实例”。
我们的web应用中,大量使用了数据库连接,如果反复建立与数据库的连接必然消耗更多的系统资源。
我们如何解决这个问题,建立唯一的数据库连接是必要的方式。
我们又如何知道与这个数据库的连接是否已经建立? 还是需要现在建立?
单件模式可以解决这个问题。
先假设我们需要一个类完成在内存中只有一份的功能,我们该如何做呢?
我们一步一步的使用前面学过的知识来写一个单件的例子。
问题1:
前面学过,每次用new 类名的方式,就可以创建一个对象。
我们必须禁止外部程序用 new 类名的方式来创建多个实例。
解决办法:
我们将构造函数 ...
static关键字用来修饰属性、方法,称这些属性、方法为静态属性、静态方法。
static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”
如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。
static关键字可以用来修饰变量、方法。
不经过实例化,就可以直接访问类中static的属性和static的方法。
static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。
...
- 2010-01-19 14:08
- 浏览 451
- 评论(0)
PHP5中使用parent::来引用父类的方法。 parent:: 可用于调用父类中定义的成员方法。parent::的追溯不仅于直接父类。
通过parent::调用父类方法
<!-- 声明一个员工类,经理类继承自员工类 -->
<?php
class employee
{
protected $sal = 300 ...
PHP5中为解决变量的命名冲突和不确定性问题,引入关键字“$this”代表其所在当前对象。
$this在构造函数中指该构造函数所创建的新对象。
在类中使用当前对象的属性和方法,必须使用$this->取值。
方法内的局部变量,不属 ...
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 当对父类的方法进行重写时,子类中的方法必须和父类中对应的方法具有相同的方法名称,在PHP5中不限制输入参数类型、参数数量和返回值类型。(这点和JAVA不同) 子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。声明方法时,如果不定义访问权限。默认权限为public。先设置一个父类,这个父类是 “Dog”类,这个类描述了dog的特性。Dog有2个眼睛,会跑,会叫。就这样描述先。我养了一直狗,是只小狗,符合Dog类的特性,但有所不同。我的小狗有名字,我的小狗太小了,不会大声 ...