PHP程序员要养成7个面向对象的好习惯

PHP程序员要养成7个面向对象的好习惯

在PHP编程早期,PHP代码在本质上是限于面向过程的。过程代码的特征在于使用过程构建应用程序块。过程通过允许过程之间的调用提供某种程度的重用。

但是,没有面向对象的语言构造,程序员仍然可以把OO特性引入到PHP代码中。这样做有点困难并且会使代码难于阅读,因为它是混合范例(含有伪OO设计的过程语言)。使用PHP代码中的OO构造—例如能够定义和使用类、能够构建使用继承的类之间的关系以及能够定义接口—可以更轻松地构建符合优秀OO实践的代码。

虽然没有过多模块化的纯过程设计运行得很好,但是OO设计的优点表现在维护上。由于典型应用程序的大部分生命周期都花费在维护上,因此代码维护是应用程序生命周期的重要部分。并且在开发过程中代码维护很容易被遗忘。如果在应用程序开发和部署方面存在竞争,那么长期可维护性可能被放在比较次要的地位。

模块化—优秀OO设计的主要特性之一—可以帮助完成这样的维护。模块化将帮助封装更改,这样可以随着时间的推移更轻松地扩展和修改应用程序。

总的来说,虽然构建OO软件的习惯不止7个,但是遵循这里的7个习惯可以使代码符合基本OO设计标准。它们将为您提供更牢固的基础,在此基础之上建立更多OO习惯并构建可轻松维护与扩展的软件。这些习惯针对模块化的几个主要特性。有关独立于语言的OO设计优点的更多信息,请参阅参考资料。

7个优秀PHP OO习惯包括:

保持谦虚

做个好邻居。

避免看到美杜莎。

利用最弱的链接。

您是橡皮;我是胶水。

限制传播。

考虑使用模式。

保持谦虚

保持谦虚指避免在类实现和函数实现中暴露自己。隐藏您的信息是一项基本习惯。如果不能养成隐藏实现细节的习惯,那么将很难养成任何其他习惯。信息隐藏也称为封装。

直接公开公共字段是一个坏习惯的原因有很多,最重要的原因是让您在实现更改中没有应有的选择。使用OO概念隔离更改,而封装在确保所作更改在本质上不是病毒性(viral)更改方面扮演不可或缺的角色。病毒性更改是开始时很小的更改—如将保存三个元素的数组更改为一个只包含两个元素的数组。突然,您发现需要更改越来越多的代码以适应本应十分微不足道的更改。

开始隐藏信息的一种简单方法是保持字段私有并且用公共访问方法公开这些字段,就像家中的窗户一样。并没有让整面墙都朝外部开放,而只打开一两扇窗户(我将在“好习惯:使用公共访问方法”中介绍访问方法的更多信息)。

除了允许您的实现隐藏在更改之后外,使用公共访问方法而非直接公开字段将允许您在基本实现的基础上进行构建,方法为覆盖访问方法的实现以执行略微不同于父方法的行为。它还允许您构建一个抽象实现,从而使实际实现委托给覆盖基本实现的类。

坏习惯:公开公共字段

在清单1的坏代码示例中,Person对象的字段被直接公开为公共字段而非使用访问方法。虽然此行为十分诱人,尤其对于轻量级数据对象来说更是如此,但是它将对您提出限制。

清单1.公开公共字段的坏习惯

classPerson

{

public$prefix;

public$givenName;

public$familyName;

public$suffix;

}

$person=newPerson();

$person->prefix="Mr.";

$person->givenName="John";

echo($person->prefix);

echo($person->givenName);

?>

如果对象有任何更改,则使用该对象的所有代码也都需要更改。例如,如果某人的教名、姓氏和其他名字被封装到PersonName对象中,则需要修改所有代码以适应更改。