搜索
首页后端开发php教程经验分享:让PHP开发者事半功倍的技巧_PHP教程
经验分享:让PHP开发者事半功倍的技巧_PHP教程Jul 20, 2016 am 10:57 AM
php事半功倍什么使用分享发生开发者技巧经验

如果你使用一面大镜子作为冲浪板会发生什么?或许你会在较短的时间内征服海浪,但是你肯定从内心深处明白,这不是冲浪的正确选择。同样的道理也适用于PHP编程,尽管这样的类比听起来有一些古怪。我们经常听到有人试图用一个周末多点的时间来学会PHP,但是请恕我直言,这是学习这门编程语言的一种非常糟糕的方式。

为何说学习PHP的过程有别于任何其它语言?

就其本质而言,如果你掌握了以PHP语言 “做事”的方式,那么在使用它时就会得心应手,因此值得你去投入精力去了解这些方式。在PHP中,单纯按照自己思路去解决问题往往会是一种错误的办法。这并不是因为你是一个糟糕的程序员,而是因为如果你想写出好的可维护性强的代码,有些标准技巧是你必须要使用的。下面让我们一起看一下你需要知道的10大技巧。

1、如何正确的创建一个网站的Index页面

创建每一个网站时,建立网站的index页面是首要做的事情之一。如果你是一个PHP新手,在编写index页面时典型的做法是只对index页面所需的内容进行编程,其它链接创建另一个页面。不过,如果想学习一种更高效的方式来实现PHP编程,可以采用“index.php?page=home”模式,许多网站都在采用这种模式。

2、使用Request Global Array抓取数据

实际上我们没有任何理由使用$_GET和$_POST数组来抓取数值。$_REQUEST这个全局数组能够让你获取一个get或form请求。因此,多数情况下解析数据的更高效代码大体如下:

<ol class="dp-c"><li class="alt"><span><span>01.</span><span class="vars">$action</span><span> = isset(</span><span class="vars">$_REQUEST</span><span>[</span><span class="string">'action'</span><span>]) ? </span><span class="vars">$_REQUEST</span><span>[</span><span class="string">'action'</span><span>] : 0; </span></span></li></ol>

3、利用var_dump进行PHP代码调试

如果你在寻找php调试技术,我必须说var_dump应该是你要找的目标。在显示php信息方面这个命令可以满足你的所有需要。而调试代码的多数情况与得到PHP中的数值有关。

4、PHP处理代码逻辑,Smarty处理展现层

Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。

简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

5、的确需要使用全局数值时,创建一个Config文件

动辄创建全局数值是一种糟糕的做法,不过有时候实际情况的确又需要这么做。对于数据库表或数据库连接信息使用全局数值是一个不错的想法,但不要在你的PHP代码中频繁使用全局数值。另外,更好的一种做法是把你的全局变量存放在一个config.php文件中。

6、如果未定义,禁止访问!

如果你正确的创建了页面,那么任何其他人没有理由访问index.php或home.php之外的index.php页面。一旦index.php被访问后,你可以通过获得变量的方式来打开需要的页面。你的index页面应该包含类似的以下代码:

<ol class="dp-c"><li class="alt"><span><span>define(</span><span class="string">'yourPage'</span><span>,1); </span></span></li></ol>

然后,其它页面应该包含:

<ol class="dp-c"><li class="alt"><span><span class="keyword">if</span><span> (!defined(</span><span class="string">'yourPage'</span><span>)) </span><span class="keyword">die</span><span>(</span><span class="string">'Access Denied'</span><span>); </span></span></li></ol>

这么做的目的是防止直接访问你的其它php页面。这样,任何试图不通过index.php访问其它网页的人,将得到“访问被拒绝”的消息。

7、创建一个数据库类

如果你正在进行数据库编程(在PHP中非常常见的任务),一个不错的想法是创建一个数据库类来处理任何数据库管理功能。示例代码如下:

<ol class="dp-c">
<li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> dbExec(</span><span class="vars">$query</span><span>)  </span></span></li>
<li><span>{  </span></li>
<li class="alt">
<span class="vars">$result</span><span> = </span><span class="vars">$this</span><span>->db-></span><span class="func">exec</span><span>(</span><span class="vars">$query</span><span>);  </span>
</li>
<li>
<span class="keyword">if</span><span> (PEAR::isError(</span><span class="vars">$result</span><span>))  </span>
</li>
<li class="alt">
<span>errorRedirect(</span><span class="vars">$result</span><span>->getMessage(), true);  </span>
</li>
<li>
<span class="keyword">else</span><span> </span>
</li>
<li class="alt">
<span class="keyword">return</span><span> </span><span class="vars">$result</span><span>;  </span>
</li>
<li><span>} </span></li>
</ol>

这个函数仅接收一个查询语句并对其执行。它还处理可能出现的任何错误。你还可以在这儿包含审核代码,不过我更喜欢使用一个类似的审核函数:

<ol class="dp-c">
<li class="alt"><span><span>01.</span><span class="comment">// checks if arguments given are integer values not less than 0 - has multiple arguments </span><span> </span></span></li>
<li>
<span class="keyword">function</span><span> sanitizeInput()  </span>
</li>
<li class="alt"><span>{  </span></li>
<li>
<span class="vars">$numargs</span><span> = func_num_args();  </span>
</li>
<li class="alt">
<span class="vars">$arg_list</span><span> = func_get_args();  </span>
</li>
<li>
<span class="keyword">for</span><span> (</span><span class="vars">$i</span><span> = 0; </span><span class="vars">$i</span><span> <span class="vars">$numargs</span><span>; </span><span class="vars">$i</span><span>++) {  </span></span>
</li>
<li class="alt">
<span class="keyword">if</span><span> (!</span><span class="func">is_numeric</span><span>(</span><span class="vars">$arg_list</span><span>[</span><span class="vars">$i</span><span>]) || </span><span class="vars">$arg_list</span><span>[</span><span class="vars">$i</span><span>] </span>
</li>
<li>
<span>errorRedirect(</span><span class="string">"Unexpected variable value"</span><span>, true);  </span>
</li>
<li class="alt"><span>}  </span></li>
<li><span>} </span></li>
</ol>

8、一个php文件处理输入,一个class.php文件处理具体功能

不让代码变得混乱的一个重要方法是:获取用户输入后,将其重定向到其它函数来进行处理。原理非常简单,php文件获得我们需要的任何输入,然后将其执行重定向到类文件中的一个函数。举例来讲,假设有一个类似“index.php?page=profile&action=display”的 URL。由profile.php来检索该网址并得到操作是“display”。然后使用一个简单的switch函数,我们来执行真正的显示函数:

<ol class="dp-c">
<li class="alt"><span><span class="keyword">require_once</span><span> PROJECTROOT.</span><span class="string">'libs/messages.class.php'</span><span>;  </span></span></li>
<li>
<span class="vars">$message</span><span> = </span><span class="keyword">new</span><span> Message();  </span>
</li>
<li class="alt">
<span class="keyword">switch</span><span> (</span><span class="vars">$action</span><span>)  </span>
</li>
<li><span>{  </span></li>
<li class="alt">
<span class="keyword">case</span><span> </span><span class="string">'display'</span><span>:  </span>
</li>
<li>
<span class="vars">$message</span><span>->display();  </span>
</li>
<li class="alt">
<span class="keyword">break</span><span>;  </span>
</li>
<li><span>... </span></li>
</ol>

如上所示,我使用了一个消息类,然后开始进行switch检查。$message只是被类中的调用函数使用的一个对象。

9、了解你的SQL语句,并总是对其审查(Sanitize)

正如我以前所提到的,任何php网站中最重要的部分有99%的可能是数据库。因此,你需要非常熟悉如何正确的使用sql。学会关联表和更多高级技术。下面我将展示一个使用MySQL的函数示例,并使用本文第7条函数进行审查。

<ol class="dp-c">
<li class="alt"><span><span class="keyword">private</span><span> </span><span class="keyword">function</span><span> getSentMessages(</span><span class="vars">$id</span><span>)  </span></span></li>
<li><span>{  </span></li>
<li class="alt">
<span class="vars">$this</span><span>->util->sanitizeInput(</span><span class="vars">$id</span><span>);  </span>
</li>
<li>
<span class="vars">$pm_table</span><span> = </span><span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'privateMsg'</span><span>];  </span>
</li>
<li class="alt">
<span class="vars">$users</span><span> = </span><span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'users'</span><span>];  </span>
</li>
<li>
<span class="vars">$sql</span><span> = "SELECT PM.*, USR.username </span><span class="keyword">as</span><span> name_sender FROM </span><span class="vars">$pm_table</span><span> PM, </span><span class="vars">$users</span><span> USR  </span>
</li>
<li class="alt">
<span>WHERE id_sender = </span><span class="string">'$id'</span><span> AND sender_purge = FALSE AND USR.id = PM.id_receiver AND is_read = TRUE  </span>
</li>
<li><span>ORDER BY date_sent DESC";  </span></li>
<li class="alt">
<span class="vars">$result</span><span> = </span><span class="vars">$this</span><span>->dbQueryAll(</span><span class="vars">$sql</span><span>);  </span>
</li>
<li>
<span class="keyword">return</span><span> </span><span class="vars">$result</span><span>;  </span>
</li>
<li class="alt"><span>} </span></li>
</ol>

首先,我们对用户输入进行检查(通过一个GET变量传递消息id),然后我们执行我们的SQL命令。注意这儿SQL的用法。你需要了解如何使用别名和关联表。

10、当你只需要一个对象时,使用单例模式

在PHP中相当常见的一种情形时,我们只需要创建一个对象一次,然后在我们的整个程序中使用它。一个很好的例子就是smarty变量,一旦被初始化后就可以在任何地方使用。这种情形的一个很好实现方案就是单例模式。示例代码如下:

<ol class="dp-c">
<li class="alt"><span><span class="keyword">function</span><span> smartyObject()  </span></span></li>
<li><span>{  </span></li>
<li class="alt">
<span class="keyword">if</span><span> (</span><span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'SmartyObj'</span><span>] == 0)  </span>
</li>
<li><span>{  </span></li>
<li class="alt">
<span class="vars">$smarty</span><span> = </span><span class="keyword">new</span><span> SmartyGame();  </span>
</li>
<li>
<span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'SmartyObj'</span><span>] = </span><span class="vars">$smarty</span><span>;  </span>
</li>
<li class="alt"><span>}  </span></li>
<li>
<span class="keyword">else</span><span> </span>
</li>
<li class="alt">
<span class="vars">$smarty</span><span> = </span><span class="vars">$GLOBALS</span><span>[</span><span class="string">'config'</span><span>][</span><span class="string">'SmartyObj'</span><span>];  </span>
</li>
<li>
<span class="keyword">return</span><span> </span><span class="vars">$smarty</span><span>;  </span>
</li>
<li class="alt"><span>} </span></li>
</ol>

注意,我们拥有一个全局smarty变量(该示例中它在config.php中被初始化),如果它的值为0,我们将创建一个新smarty对象。否则,它意味着该对象已经被创建,我们只需要返回它。

希望本文的介绍,能够给你带来帮助。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445759.htmlTechArticle如果你使用一面大镜子作为冲浪板会发生什么?或许你会在较短的时间内征服海浪,但是你肯定从内心深处明白,这不是冲浪的正确选择。同...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
芒果tv会员账号分享2023芒果tv会员账号分享2023Feb 07, 2024 pm 02:27 PM

芒果TV拥有各种类型的电影、电视剧、综艺等资源,用户可以在其中自由的选择进行观看。芒果tv会员不仅能够看到全部的VIP剧而且还能够设置最高清的画质,帮助用户爽快看剧,下面小编就给大家带来一些芒果tv免费的会员账号供用户们使用,赶紧来看一看吧。芒果tv最新会员账号免费分享2023:注意:都是收集的最新会员账号,可以直接登录使用,不要随意的修改密码。账号:13842025699密码:qds373账号:15804882888密码:evr6982账号:13330925667密码:jgqae账号:1703

win7企业版激活密钥有哪些的分享win7企业版激活密钥有哪些的分享Jul 09, 2023 pm 03:01 PM

win7企业版激活密钥有没有最新的?如果你安装的是官方win7企业版,会提示用windows7企业版产品密钥来激活,否则不能正常使用。所以小编接下来跟大家分享一些win7企业版激活密码,大家一起来看看吧。Q3VMJ-TMJ3M-99RF9-CVPJ3-Q7VF3KGMPT-GQ6XF-DM3VM-HW6PR-DX9G8MT39G-9HYXX-J3V3Q-RPXJB-RQ6D79JBBV-7Q7P7-CTDB7-KYBKG-X8HHCP72QK-2Y3B8-YDHDV-29DQB-QKWWM6JQ

win7系统如何分享wifi热点win7系统如何分享wifi热点Jul 01, 2023 pm 01:53 PM

  win7系统如何分享wifi热点?我们电脑在连接了网络之后,也是可以进行无线网络的分享的。很多用户想要将自己电脑的网络分享到手机上来使用。很多小伙伴不知道怎么详细操作,小编下面整理了win7系统如何分享wifi热点的操作方法步骤,如果你感兴趣的话,跟着小编一起往下看看吧!  win7系统如何分享wifi热点的操作方法步骤  1、要想开启wifi热点,首先得要有无线网卡,笔记本是有自带的,pc的话可以购买一个随身wifi来分享wifi,这里就不叙述了。首先按下键盘上的windows键打开开始菜

PHP开发心得分享:掌握各种功能实现的经验与建议PHP开发心得分享:掌握各种功能实现的经验与建议Nov 22, 2023 pm 12:02 PM

在当前互联网高速发展的时代,PHP作为一种服务器端脚本语言,被越来越多的开发者所采用。PHP具有简单易学、灵活、开源免费等优势,可以快速开发各种网站和Web应用。然而,作为一名PHP开发者,要想在激烈的竞争中脱颖而出并写出高效稳定的代码,还需要掌握各种功能的实现技巧和经验。首先,合理规划项目架构是开发PHP应用的关键。一个良好的项目架构可以提供更好的代码可维

windows7旗舰版激活码分享windows7旗舰版激活码分享Jul 15, 2023 am 11:25 AM

  我们都知道windows7系统需要用激活系统之后才能正常使用windows7的各项功能,激活系统我们一般有两种方法一种是使用官方发布的激活码激活,一种是使用网上的激活工具来激活,很多小伙伴都不知道windows7旗舰版激活码使用方法。下面跟小编一起来看看吧。  windows7旗舰版激活码  神key  KH2J9-PC326-T44D4-39H6V-TVPBY  TFP9Y-VCY3P-VVH3T-8XXCC-MF4YK  236TW-X778T-8MV9F-937GT-QVKBB  87

简单分享:NumPy库正确卸载的方法简单分享:NumPy库正确卸载的方法Jan 26, 2024 am 08:42 AM

如何正确卸载NumPy库:简单教程分享引言:NumPy是Python中一个常用的数值计算库,它提供了大量的数学函数和数组操作工具,被广泛应用于科学计算、数据分析和机器学习等领域。然而,在某些情况下,我们可能需要卸载NumPy库并重新安装或更新它。本文将为大家介绍如何正确卸载NumPy库,并提供具体的代码示例,帮助读者轻松完成此任务。步骤一:确认NumPy库是

如何在在线答题中实现试卷的分享和发布功能如何在在线答题中实现试卷的分享和发布功能Sep 25, 2023 am 08:37 AM

如何在在线答题中实现试卷的分享和发布功能随着互联网的发展,越来越多的教育机构和个人开始在线教育,其中在线答题作为一项重要的教学工具被广泛使用。在这种情况下,试卷的分享和发布功能成为在线答题平台的关键特性之一。本文将介绍如何实现试卷的分享和发布功能,并给出具体的代码示例。一、设计及实现思路试卷分享和发布功能的设计和实现需要考虑以下几个方面:用户端功能:用户可以

踩过的坑:Go语言项目开发经验与教训踩过的坑:Go语言项目开发经验与教训Nov 03, 2023 am 08:14 AM

踩过的坑:Go语言项目开发经验与教训在软件开发的道路上,每个开发者都会不可避免地踩过一些坑。当然,对于Go语言的开发者来说也不例外。本文将分享我在使用Go语言进行项目开发过程中所踩过的坑,希望能给其他开发者带来一些经验和教训。不同版本的Go语言在使用Go语言进行项目开发时,我们必须关注Go语言的版本。不同版本之间可能存在一些语言上的差异或者API的变动,这些

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。