php中的数据映射模式 php中的数据映射模式有哪些

assign("row",$row);”是什么意思?'>thinkPHP中“$this->assign("row",$row);”是什么意思?

$this-assign("arr",$arr)中第一个参数是在模板中使用的变量名,名字可以任意取,第二个参数是传递给模板的变量。举个例子:

创新互联公司专业为企业提供开江网站建设、开江做网站、开江网站设计、开江网站制作等企业网站建设、网页设计与制作、开江企业网站模板建站服务,十多年开江做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

1、在Action中赋值了一个myname模板变量:

12$name = 'ThinkPHP';$this-assign('myname',$name);

表示把Action中$name变量(其值为'ThinkPHP')赋值给模板变量myname,当然也可以是其他名字。

2、在模板文件中使用myname变量:

在模板文件(即对应的html文件)使用 {$myname} 即表示 字符串:'ThinkPHP'

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。

ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。

ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite以及PDO等多种数据库,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。

作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注您的业务逻辑。

参考资料

360问答.360问答[引用时间2018-1-4]

360问答.360问答[引用时间2018-1-4]

简要论述对ORM模式的理解,并简述ThinkPHP中的ORM的基本原理。

RM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。

举个例子:获取一篇文章,传统的方式先要执行一个sql检索数据

select * from post where id = 1

然后输出标题和内容使用

echo $post['title']; echo $post['content'];

在thinkphp中,就解决了这个问题,其原理也很简单:

$post = postTable::getInstance()-find(1);#会再内部执行select * from post where id = 1

然后输出:

echo $post-getTitle();

echo $post-getContent();

妈妈再也不用担心我的强迫症了^_^

高级点的应用,文章和分类是一对多关系、文章和标签是多对多关系

$cate = $post-getCategory(); //获取文章分类

echo $cate-getName(); //获取分类名

$tags = $post-getTags(); //获取一个文章的所有标签

使用方法更是简单,比如:

$list = M()-where()-field()-order()-find()/select()/getField(),等等,在其手册中可以很容易找到,也很容易使用。

php除了mvc还有什么架构

MVC

MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。

OOP

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是,计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。OOP 主要有以下的概念和组件:

组件 - 数据和功能一起在运行着的计算机程序中形成的单元,组件在 OOP 计算机程序中是模块和结构化的基础。

抽象性 - 程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。

封装 - 也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。

多态性 - 组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。

继承性 - 允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。典型地来说就是用类来对组件进行分组,而且还可以定义新类为现存的类的扩展,这样就可以将类组织成树形或网状结构,这体现了动作的通用性。

由于抽象性、封装性、重用性以及便于使用等方面的原因,以组件为基础的编程在脚本语言中已经变得特别流行。

ORM

对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。

thinkphp中的字段映射可以把表单中的多个值映射到数据库中的一个属性吗

将字段序列化,例如属性name

$ModelObj-name= serialize(Array('name1' = I('post.name1'), 'name2' = I('post.name2'), 'name3' = I('post.name3')));

为什么thinkphp中字段映射不起作用

ThinkPHP的字段映射功能可以让你在表单中隐藏真正的数据表字段,而不用担心放弃自动创建表单对象的功能,假设我们的User表里面有username和email字段,我们需要映射成另外的字段,定义方式如下:

Class

UserModel

extends

Model{

protected

$_map

=

array(

'name'

='username',

//

把表单中name映射到数据表的username字段

'mail'

='email',

//

把表单中的mail映射到数据表的email字段

);

}

这样,在表单里面就可以直接使用name和mail名称作为表单数据提交了。在保存的时候会字段转换成定义的实际数据表字段。字段映射还可以支持对主键的映射。

如果我们需要把数据库中的数据显示在表单中,并且也支持字段映射的话,需要对查询的数据进行一下处理,处理方式是调用Model类的parseFieldsMap方法,例如:

//

实例化User模型

$User

=

M('User');

$data

=

$User-find(3);

这个时候取出的data数据包含的是实际的username和email字段,为了方便便表单输出,我们需要处理成字段映射显示在表单中,就需要使用下面的代码处理:

$data

=

$User-parseFieldsMap($data);

这样一来,data数据中就包含了name和mail字段数据了,而不再有username和email字段数据了。

4


当前文章:php中的数据映射模式 php中的数据映射模式有哪些
转载注明:http://myzitong.com/article/dosoigp.html