源起
借来一本书,《PHP&MySQL范例精解——创建、修改、重用》。虽然是2008年出版的老书,但对与我这样的新手来说还是挺有帮助的,毕竟那些基本的设计思想是不会过时的。
目录结构设计
书中说,在开发过程中第一步是设计程序的目录结构。建议创建三个主文件夹,分别用来:
- public_files:保存可以公共访问的页面;
- lib:保存可以被其他文件调用的引用文件;
- templates:保存页面显示文件。
Web服务器只允许访问public_files下的文件,如此一来可以增强系统的安全性。
数据库设计
将使用次数很少甚至只有一次的数据单独存放在一个表中并及时删除,以避免数据冗余。例如,此书就将用户激活相关的信息单独放在了一个表中。因为这些信息只在激活时用到一次,用完即删。
编写共享代码
将共享的代码及链接数据库的代码分别存在在一个文件中,增加代码的重用度,方便其他文件调用。
User类的设计
在MVC思想中该部分属于model的设计。在设计一个类的时候应牢记,在面向对象编程中,对象即对应着生活中的实体。类的属性用于描述对象,而类的方法则用于直接操作对象或者做一些与该对象相关的操作。对于一个用户类而言,首先要有用户ID、用户名、密码等这些用户信息,是为该类的属性。再者,我们需要对用户进行查找、创建、更新信息、激活等操作,于是便有与之对应的方法来完成这些操作。
属性的重载此书使用了重载的放松来动态地创建属性。这样做的好处是若以后要新增一些属性几乎不用对代码作出改动,直接调用这些需要添加的属性,就行了。利用重载来动态创建属性与直接再代码中添加一个新的属性是不一样的。属性的重载利用了魔术方法__get()和__set()。在给不可访问属性(未定义或不可见)赋值时,__set()会被调用;在读取不可访问属性的值时__get()会被调用。一般通过__set()将重载的属性的数据保存到一个私有数组字段中,需要读取重载的属性时又通过__get()从这个私有数组字段中读取。示例代码如下:
class User{ private $uid; private $field; //initialize a User object public function __construct() { $this->uid = null; $this->field = array('username' => '', 'password' => '', 'emailAddr' => '', 'isActive' => false); } //override magic method to retrieve properties public function __get($field) { if($field == 'userId'){ return $this->uid; }else{ return $this->field[$field]; } } //override magic method to set properties public function __set($field, $value) { if(array_key_exists($field, $this->field)){ $this->field[$field] = $value; } }}
需要注意的是PHP中的重载与其他语言的不同。其他语言的重载一般是指同函数名称不同参数个数从而实现同名的多个函数。关于PHP重载的更多内容见PHP手册:重载
对数据进行验证
在对数据进行处理之前需要对数据进行验证。当数据验证为是我们期望的那样之后再对数据进行处理。否则可能会出现不可预知的错误。新手往往可能会忽视这一点。例如在PHP的代码中经常会出现检测某个量是否为空,若非空再进行操作。
动态的SQL语句
实现查找、保存等方法是需要用到动态的SQL语句。此书通过sprintf()函数来实现。sprintf()函数类似与C#中的String.Format()。然而这种方式略繁琐,个人感觉目前会有更好的方式。当使用sprintf()函数实现动态SQL时,对于较复杂的字符串参数需要使用real_escape_string()函数进行转义,以确保代码的安全性。(编码问题貌似一般和SQL注入有关)。
模板
使用模板可以将逻辑和页面设计分离。此书在这里使用了一个简单的模板:将页面各个部分的内容保存到$GLOBALS数组中,模板文件在各个部分直接输出数组的内容。因此若想动态的展示页面,只需修改$GLOBALS中的内容,再展示模板文件即可。
结语
本文是一篇简单的学习笔记,主要是帮助自己整理思路,如果能对其他人也有一些帮助就更好了~【用markdown写东西确实也挺爽的

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

是的,優化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)優化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,並避免使用

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用