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实现。
分享到:
相关推荐
Konstantin Käfer, Emma Hogbin "Front End Drupal: Designing, Theming, Scripting (Developer's Library)" Prentice Hall PTR | English | 2009-04-15 | ISBN: 0137136692 | 456 pages | PDF | 4 MB “For ...
使用这个 Composer 包安装 Drupal: 不习惯作曲家? 第一步是安装 Composer。 这本质上是一个单行过程: curl -s https://getcomposer.org/installer | php Windows 用户可以在此处下载 phar 文件:[ composer)...
欢迎使用@ koromerzhin / template-drupal :waving_hand: 网站模板模板 :house: 需要 软件: 制作 码头工人 库罗默任(Koromerzhin)/ traefikproxy储存库 配置: 码头工人 主持人: drupal.traefik.me Récup...
cbf-drupal:用于CBF的Drupal模块
ansible-role-drupal:Ansible角色-Drupal
头盔图:Drupal 。 这些是利用Helm安装Drupal的说明。 该图表将使您可以设置和配置Drupal以及其他集成: 使用ProxySQL配置MySQL 使用PGBouncer配置的PostgreSQL 雷迪斯漆请查阅我们的体系结构图以获取有关Azure的...
litmos 和 litmos_feature 模块会将您的课程从 CallidusCloud 的 Litmos 学习平台导入到您的 Drupal 站点作为节点。 启用模块后,您将在管理配置页面中看到 Litmos 设置。 输入您的 Litmos API 凭据以启用自动课程...
docker-drupal Docker 上的 Drupal示例用法注意:以下过程已确认在 OS X 上使用boot2docker和boot2docker docker-compose 。 git clone ...
drupal:验证和检查版本 drupal验证和检查版本扩展名为: 现在支持最新版本!!! - 验证是否使用drupal构建了网站并检测其版本 - 显示哪些次要版本更新可用于下载并提供直接链接 - 显示哪些主要版本更新可用于下载并...
可疑的drupal 插件到。特征显示当前工作目录,缩写(默认鱼样式) 显示活动的 git 分支,如果有的话显示活动的 drush 站点别名(如果有) 如果当前 git 目录是“脏的”,则显示黄色 ✗
ansible-deploy-drupal:用于部署Drupal 8站点的Ansible角色
模块以下是您在每个项目中都应该拥有的一些模块: - Drupal 6、Drupal 7 - Drupal 6、Drupal 7 - Drupal 6、Drupal 7 - Drupal 6、Drupal 7 - Drupal 7 - Drupal 6、Drupal 7、Drupal 8 - Drupal 6、Drupal 7 - ...
对Drupal做出React 该模块将React中的一个简单语句集成到了drupal 8块中。 先决条件 Drupal的实例 node.js npm 纱 网页包 激活模块之前 将模块放在模块的自定义文件夹中。 然后,在命令行中,将自己置于模块的...
要开始使用此docker4drupal本地环境实例,请更新Makefile: 用{PRODUCT_NAME}将所有字符串更新为您想要的名称。更新docker-compose.yml 1.要开始使用此docker4drupal本地环境实例,请更新Makefile: 使用docker-...
用于Drupal的Bitnami Docker映像 什么是Drupal? Drupal是市场上功能最多的开源内容管理系统之一。 Drupal专为高性能而构建,可扩展到许多服务器,可通过REST,JSON,SOAP和其他格式轻松集成,并具有多达15,000个...
Drupal FFLCH Plataforma Drupal美国站点位于FFLCH。 创建和编辑composer.json。 原则原则: 网站/配置文件/配置文件/ fflchprofile:配置文件自定义配置 网站/模块/自定义:módulosespecifícosde cada网站 部署...
部署Drupal Cookbook 描述 安装,配置和引导在MySQL和Apache上运行的站点,并在需要时使用Nginx反向代理。 本菜谱支持两个主要用例: 您有一个现有的Drupal站点(代码库,数据库SQL转储,并且可能是在加载所有内容...
用于网站快速原型制作的前端原型工具Fepper的此发行版具有为Drupal 8配置的模板以及为容纳这些模板而构建的。 为了使该项目适应Drupal 7,请遵循。 如果您不需要与Drupal交互,。模板重用对source/03-templates中的...
适用于Drupal的SYSTEMAKER BOOTSTRAP主题可直接用于Drupal的Bootswatch外观的Bootstrap子主题。 要使用其他靴子表皮,请按照以下说明进行操作: 在下载其较少的文件(variables.less和bootswatch.less)。 将它们...
Drupal 8: Enterprise Web Development English | 30 Dec. 2016 | ASIN: B01N2ZWUK1 | ISBN-13: 9781787283190 | 1005 Pages | This course offers a thorough coverage of developing, managing, extending, and ...