这篇文章介绍在 PHP 的面向对象编程(OOP)。我将演示如何用面向对象的概念编出较少的代码但更好的程序。祝大家好运。
面向对象编程的概念对每一个作者来说都有不同的看法,我提醒一下一个面向对象语言应有的东西:
- 数据抽象和信息隐藏
- 继承
- 多态性
在PHP中使用类进行封装的办法:
<?php
class Something {
// In OOP classes are usually named starting with a cap letter.
var $x;
function setX($v) {
// Methods start in lowercase then use lowercase to seprate
// words in the method name example getValueOfArea()
$this->x=$v;
}
function getX() {
return $this->x;
}
}
?>
当然你可以用你自己的办法,但有一个标准总是好的。
PHP 中类的数据成员使用 "var" 定义,数据成员是没有类型直到被赋值。一个数据成员可能是一个 integer、数组、联合数组 (associative array) 或甚至对象(object). 方法在类里定义成函数,在方法里存取数据成员,你必须使用 $this->name 这样的办法,否则对方法来说是一个函数的局部变量。
使用 new 来创建一个对象
$obj = new Something;
然后使用成员函数
$obj->setX(5);
$see = $obj->getX();
setX 成员函数将 5 赋给对象(而不是类)obj 中成员变量, 然后 getX 返回值 5.
你也可以用对象引用来存取成员变量,例如:$obj->x=6; 然而,这不一种好的面向对象编程的方法。我坚持你应使用成员函数来设置成员变量的值和通过成员函数来读取成员变量。如果你认为成员变量是不可存取的除了使用成员函数的办法,你将成为一个好的面向对象程序员。但不幸的是 PHP 本身没有办法声明一个变量是私有的,所以允许糟糕的代码存在。
在 PHP 中继承使用 extend 来声明。
<?php
class Another extends Something {
var $y;
function setY($v) {
// Methods start in lowercase then use lowercase to seperate
// words in the method name example getValueOfArea()
$this->y=$v;
}
function getY() {
return $this->y;
}
}
?>