搜索
首页后端开发php教程PHP用户注册系统动手实践

源起

借来一本书,《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写东西确实也挺爽的

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
高流量网站的PHP性能调整高流量网站的PHP性能调整May 14, 2025 am 12:13 AM

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

PHP中的依赖注入:初学者的代码示例PHP中的依赖注入:初学者的代码示例May 14, 2025 am 12:08 AM

你应该关心DependencyInjection(DI),因为它能让你的代码更清晰、更易维护。1)DI通过解耦类,使其更模块化,2)提高了测试的便捷性和代码的灵活性,3)使用DI容器可以管理复杂的依赖关系,但要注意性能影响和循环依赖问题,4)最佳实践是依赖于抽象接口,实现松散耦合。

PHP性能:是否可以优化应用程序?PHP性能:是否可以优化应用程序?May 14, 2025 am 12:04 AM

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

PHP性能优化:最终指南PHP性能优化:最终指南May 14, 2025 am 12:02 AM

theKeyStrategiestosiminificallyBoostphpapplicationPermenCeare:1)useOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)优化AtabaseInteractionswithPreparedStateTemtStatementStatementSandProperIndexing,3)配置

PHP依赖注入容器:快速启动PHP依赖注入容器:快速启动May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依赖注入与服务定位器PHP中的依赖注入与服务定位器May 13, 2025 am 12:10 AM

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

PHP性能优化策略。PHP性能优化策略。May 13, 2025 am 12:06 AM

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

PHP电子邮件验证:确保正确发送电子邮件PHP电子邮件验证:确保正确发送电子邮件May 13, 2025 am 12:06 AM

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

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脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

DVWA

DVWA

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

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能