Drupal: 面向对象的设计理念

Drupal由于历史原因没有采用PHP5中的OO设计而被不少人诟病。

尤其是没有使用class,而这个单词实际上已成为OO的代名词。

你可以认为Drupal是面向模块和函数的,但这并非意味着Drupal的设计中没有体现OO的思想。

实际上Drupal的很多机制设计很精巧,和OO的编程模式有异曲同工之妙。

1、对象(Objects)

Drupal中的node、module、theme都可以看做是对象。比如node,是构建网页中区块的基本对象,

它基于外部可见的数据表来构造而不是class,node.install中定义了基本的数据字段。

扩展模块可以很容易的扩展node对象的数据字段。这很类似于class的属性扩展。

node的方法封装在node.module中,通常使用node_invoke来调用。


2、抽象(Abstraction)

Drupal的hooks机制是最基础的接口抽象。定义了一个模块能够执行的操作。

实际上Drupal内核并不需要了解具体模块是什么,只要它按照约定的接口来执行就行。


3、封装(Encapsulation)

Drupal并没有实现严格意义上的封装。也没有private/protected/public这样的访问限制级别。

不过通过遵循一定的编程规范,可以有类似的效果:

通过使用模块前缀命名函数,可以避免函数在模块之间发生冲突。这类似于namespace;

通过使用_和__前缀符号来表明这个函数的访问范围。

myfunc() : public

_myfunc() : protected

__myfunc(): private


4、多态(Polymorphism)

node就是Drupal实现多态的最好的例子。模块调用node_build来构造node,然后提交给drupal_render来产生html。

而最终实际的输出取决于node的类型。这和OO语言中根据消息中对象类型来决定实际调用方法的处理如出一辙。


5、继承(Inheritance)

theme可以看做是从一个抽象基类派生而来。抽象基类的方法在theme.inc中定义。缺省的theme实现在模块中完成。

theme可以决定使用自己的render实现还是使用默认的render实现。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值