`
yipsilon
  • 浏览: 246947 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

感觉PHP的最佳实践就是“数组编程”

阅读更多

也研究了一段时间的PHP,使用过了一堆libraries,之后发现:原来PHP的最佳实践就是“数组编程”啊!

从以下几个角度来看:

1. 基本语法(foreach等、array函数库):对于数组的操作是最简便的,而且还支持literal样式的数组(类似于Java的Map),不用耗费多少时间就可以掌握。

2. 核心引擎(Zend Engine):面向对象的编程开发量比较繁琐,没有Java那么方便。更重要的是,PHP引擎处理对象的效率比较低。

3. 数据库访问(PHP原生):返回出来数组时效率最高,而且还最简单。

4. 模板引擎(Smarty等):使用数组时,对模板制作最方便(直接使用“.”就可以了)。

个人感觉,以后要做PHP项目时,首推的就是面向数组的编程,既快速又高效....

分享到:
评论
15 楼 showerxpII 2008-09-08  
class TableManager {
		private $tableName,$fields,$conn;
		
		public function __construct($con){
			$this->fields = array();
			$this->conn=$con;
		}
		public function __destruct(){
			
		}
		public function getConn(){
			return $this->conn;
		}
		public function getTableName(){
			return ($this->tableName);
		}
		public function setTableName($value){
			$this->tableName=$value;
		}
		public function getFields(){
			return ($this->fields);
		}
		public function setFields($value){
			$this->fields=$value;
		}
		//添加新的数据库记录
		public function saveNew()
		{
			//一个空的纪录集合 
			$rs=$this->conn->Execute("SELECT * FROM ".$this->tableName);
			$insertSQL = $this->conn->GetInsertSQL($rs, $this->fields);
			$this->conn->Execute($insertSQL); 
		}
		//修改数据库记录
		public function update($fieldName,$fieldValue)
		{
			$rs=$this->conn->Execute("SELECT * FROM ".$this->tableName." where ".$fieldName."=".$fieldValue);
			$updateSQL = $this->conn->GetUpdateSQL($rs, $this->fields);
			$this->conn->Execute($updateSQL); # 更新资料库中的记录
		}
		public function updateRecords($sqlWhere){
			$rs=$this->conn->Execute("SELECT * FROM ".$this->tableName." where ".$sqlWhere);
			$updateSQL = $this->conn->GetUpdateSQL($rs, $this->fields);
			$this->conn->Execute($updateSQL); # 更新资料库中的记录
		}
		public function delete(){}
	}	
class PicTableManager extends TableManager {
		private $uploadFiles;//数组,保存图片路径字段.
					//数组结构:$uploadFiles["uploadFieldName"]=uploadFileObj;
					//eg,这里的pic是数据库中的字段名称:
					  // $objFile=new UploadFiler($_FILES['pic'],_FileDir);
					//   $uploadFiles['pic']=$objFile;	
		public function __construct($con){
			parent::__construct($con);
			$this->uploadFiles=array();
		}
		public function __destruct(){}
		public function setUploadFiles($uploadFilesV){
			$this->uploadFiles=$uploadFilesV;
		}
		public function getUploadFilesV(){
			return $this->uploadFilesV;
		}
		//上传图片方法
		private  function uploadFiles()
		{
			foreach ($this->uploadFiles as $uploadObj) {
				$uploadObj->uploadFile();
			}
		}
		//删除上传的图片,修改过的图片
		public function delUploadedFile($fieldName,$fieldValue)
		{
			$conn=$this->getConn();
			$sqlString="SELECT * FROM ".$this->getTableName()." where ".$fieldName."=".$fieldValue;
			$rs=$conn->Execute($sqlString);
			foreach ($this->uploadFiles as $uploadFieldName=>$uploadFileObj) {				
				if (file_exists(_FileDir.$rs->fields[$uploadFieldName])) {
    				unlink(_FileDir.$rs->fields[$uploadFieldName]);//删除文件   		
				}
				else continue;
			}
		}
		//覆写保存新纪录的方法
		public function saveNew()
		{
			$this->uploadFiles();
			$tempFields=$this->getFields();
			//生成用于保存的fields数组
			foreach ($this->uploadFiles as $uploadFieldName=>$uploadFileObj){
				$tempUploadfile=$uploadFileObj->getUploadFile();
				$tempFields[$uploadFieldName]=$tempUploadfile["name"];	//
			}
			$this->setFields($tempFields);
			parent::saveNew();
		}
		//覆写修改纪录的方法
		public function update($fieldName,$fieldValue)
		{
			$this->delUploadedFile($fieldName,$fieldValue);//删除对应纪录的有关修改过的老图片
			$this->uploadFiles();
			$tempFields=$this->getFields();
			foreach ($this->uploadFiles as $uploadFileTableName=>$uploadFileObj){				
				if (!$uploadFileObj->getUploadError()) {
					$fileTemp=$uploadFileObj->getUploadFile();
					$tempFields[$uploadFileTableName]=$fileTemp["name"];
				}
				else echo $uploadFileObj["error"];
			}
			$this->setFields($tempFields);
			parent::update($fieldName,$fieldValue);
		}
		public function delete($id)
		{
			
		}
   	}

对我来说,很多情况下已经够用了。
14 楼 yipsilon 2008-09-04  
xombat 写道
基于数组编程:),以前隐约有过这种思考,今天看到你的文章产生了共鸣了!

确实我试过mysqli_result的三个函数:
fetch_assoc()
fetch_array()
fetch_row()
assoc()居然占用内存最少,谁速度最快被我忘了..assoc()返回的可是map啊。

我估计最快的应该是 fetch_row(),因为返回数组的key就是顺序数字。

主要是呀 fetch_array() 生成的数据是 fetch_assoc() + fetch_row() 合并而成的,所以效率不怎么样,不过它是为简化开发做的。
13 楼 xombat 2008-09-02  
基于数组编程:),以前隐约有过这种思考,今天看到你的文章产生了共鸣了!

确实我试过mysqli_result的三个函数:
fetch_assoc()
fetch_array()
fetch_row()
assoc()居然占用内存最少,谁速度最快被我忘了..assoc()返回的可是map啊。
12 楼 七月十五 2008-08-09  
ctrlming 写道
PHP给我的感觉就是 小巧灵活


此豹之一斑耳
11 楼 七月十五 2008-08-09  
任何语言就语法层面来说,各有千秋
编程,光掌握语法是不行的
10 楼 ctrlming 2008-03-07  
PHP给我的感觉就是 小巧灵活
9 楼 Jackphone 2007-12-25  
zwws 写道

一直习惯不了.NET 总觉得MS的东西都好变态.


可是你大多数时间是在使用MS的东西吧
8 楼 zwws 2007-12-23  
PHP 的数组很灵活 性能也不错
一直习惯不了.NET 总觉得MS的东西都好变态.
7 楼 yipsilon 2007-12-21  
计算机语言的“面向”和“基于”是从英文中的“Oriented”和“Based”翻译来的。而这两个词可以有多种翻译,作为程序员,不要在这种无谓的地方钻牛角尖,最好把它用在程序开发上,说不定还会给自己带来很大好处。:)
6 楼 diogin 2007-12-21  
什么是“面向”对象?为什么是“面向”?什么又是“基于”对象?这些名词很傻。依我看,不如统一叫作“对象化编程”,与“结构化编程”相对应。
5 楼 Jackphone 2007-12-21  
不错,我也有同感

总觉得PHP没有真正的做到面向对象
4 楼 115300111 2007-12-12  
太神奇了!

数组虽好 可不能面对喔~
3 楼 yipsilon 2007-11-27  
算不上新词啦。
2 楼 diogin 2007-11-26  
呵呵,“面向数组编程”,你得到了精髓 :p
1 楼 flynetcn 2007-11-26  
面向数组的编程?
楼主发明的新词?
php的数组是一大特色,它实际上是有序图。

相关推荐

    PHP+核心技术与最佳实践.pdf

    3. PHP最佳实践 - 代码规范:遵循PSR(PHP Standard Recommendations)标准,比如PSR-1、PSR-2等,以提高代码的可读性和一致性。 - 安全性:注意防范常见的Web安全问题,例如SQL注入、跨站脚本攻击(XSS)、跨站...

    PHP+核心技术与最佳实践

    《PHP+核心技术与最佳实践》是一本深入探讨PHP编程语言核心技术和最佳实践的书籍。它旨在帮助开发者提升在PHP领域的专业技能,理解并掌握PHP的精髓,从而在实际开发中实现更高效、更稳定的应用程序。 PHP...

    《PHP核心技术与最佳实践》内知识要点及Demo.zip

    《PHP核心技术与最佳实践》是一本深入探讨PHP编程语言核心概念和技术的书籍,旨在帮助开发者提升PHP编程技能并掌握最佳实践。在这个压缩包中,"小王.png"可能是一个作者或示例代码作者的头像,而...

    PHP编程开发手册大全

    12. **安全最佳实践**:防范SQL注入、XSS攻击、CSRF等常见Web安全问题的方法,以及如何确保代码的安全性。 13. **性能优化**:讲解如何通过缓存、代码优化、配置调整等方式提升PHP应用的性能。 14. **调试与测试**...

    PHP编程实例100例

    【PHP编程实例100例】是一份集合了100个PHP编程示例的资源,旨在帮助初学者和有经验的开发者加深对PHP语言的...通过这些实例,不仅可以学习到具体的代码实现,还能理解背后的原理和最佳实践,从而提升解决问题的能力。

    PHP5权威编程(中文版)

    对于Web开发中的安全性问题,如防止SQL注入、XSS攻击等,书中也给出了预防措施和最佳实践。 另外,《PHP5权威编程》还深入讲解了PHP5与Web服务API的集成,包括SOAP和XML-RPC,以及如何创建RESTful Web服务。这些...

    PHP判断一个数组是另一个数组子集的方法详解

    在PHP编程中,判断一个数组是否为另一个数组的子集是一项常见的任务,这涉及到数组的比较和搜索操作。本文将详细介绍三种不同的PHP方法来实现这一功能,并解释它们的工作原理。 ### 1. 使用 `foreach` 循环和 `in_...

    PHP 根据数组值取得键值.rar

    在PHP编程语言中,处理数组是一项常见的任务。数组是一种数据结构,可以存储多个值,并通过唯一的键来...通过阅读"PHP 根据数组值取得键值.pdf"这份文档,你将能深入理解这一主题,并掌握更多相关的技巧和最佳实践。

    PHP网络编程从入门到精通

    PHP提供了多种内置函数和最佳实践来增强安全性,例如使用预编译语句防止SQL注入,过滤和转义用户输入以防止XSS攻击。 最后,本教程可能还会涵盖PHP的其他高级主题,如错误和异常处理、会话管理、cookies、模板引擎...

    PHP 编程经典一百例

    13. **PHP框架应用**:许多PHP经典案例可能涉及到知名框架的使用,如Laravel、Symfony、CodeIgniter等,这将帮助你了解框架的工作原理和最佳实践。 14. **PHP与前端技术集成**:例如,JavaScript、jQuery、Ajax与...

    PHP编程与实例

    **八、PHP的最佳实践** 1. **代码规范**:遵循一定的编码标准,如PSR(PHP Framework Interop Group)的标准。 2. **错误处理**:使用`try...catch`捕获异常,使用`error_reporting()`和`ini_set()`设置错误报告级别...

    PHP5权威编程_高清300dpi版

    本书全面覆盖了PHP5的核心概念、语法特性以及实践应用,旨在帮助读者掌握PHP5的高级技术和最佳实践。 在PHP5中,最重要的改进之一是面向对象编程(OOP)的支持得到了显著增强。书中详细介绍了类与对象的概念,包括...

    PHP开发实践权威指南源码

    通过详细研究这些源码,开发者不仅可以学习到PHP的基本用法,还能了解到实际项目中的最佳实践,提升自己的PHP开发能力。同时,这也是一份宝贵的参考资料,可以在遇到问题时作为参考,或者在构建新项目时获取灵感。

    PHP编程教程(pdf)

    你还将了解到PHP的最佳实践和代码优化技巧,以提高程序性能和可维护性。 通过这个《PHP编程教程》,你不仅可以系统地学习PHP的基础知识,还能逐步建立实际项目开发的经验。无论你是完全的编程新手,还是希望转行到...

    PHP核心编程(PDF)

    10. **PHP框架和最佳实践**:简要介绍流行的PHP框架(如Laravel、Symfony),以及遵循的最佳编码和项目管理实践。 书中可能还会包含实际案例分析和项目实战,让理论知识与实际应用相结合,提升读者的编程技能。此外...

    php 删除一维数组中某一个值元素的操作方法

    4. **最佳实践:`array_diff`与`array_merge`结合**: 使用`array_diff`直接过滤掉数组中与目标值匹配的元素,然后用`array_merge`合并,这样可以避免使用`unset`和重新分配索引的开销。 ```php $arr = array_...

    PHP编程起步自学教程 PDF电子书版

    12. **PHP最佳实践**:提供编写高效、可维护PHP代码的技巧和建议,包括命名规范、代码组织、调试和性能优化。 通过学习这本书,读者将建立起坚实的PHP编程基础,并具备独立完成简单Web项目的能力。随着经验的积累,...

    PHP 编程词典

    "PHP编程词典"是一款专为PHP学习者和开发者设计的查询软件,它集合了PHP的各类概念、函数、语法结构和最佳实践,旨在帮助用户快速查找和理解PHP编程中的关键信息。 ### PHP基础 PHP是一种服务器端的脚本语言,其...

    PHP面向对象高级编程和设计—面向对象高级编程和设计模式

    **设计模式**是面向对象编程中的一套通用解决方案,它们是经过验证的最佳实践,可以解决常见的设计问题。PHP 5支持多种设计模式,包括: 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。这在需要...

    PHP编程教程,安装教程,PHP文档说明及三合一

    4. PHP The Right Way:这是一本推荐最佳实践的PHP指南,帮助开发者编写高质量、安全的代码。 四、PHP编程实践 1. Web应用开发:PHP常用于开发动态网站,如内容管理系统(CMS)、电子商务平台等。 2. 数据库操作:...

Global site tag (gtag.js) - Google Analytics