还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
开发课程课件概览PHP欢迎参加我们的开发学习之旅!本课程将带领您从基础知识入门,PHP PHP逐步深入到高级应用开发,包括语法结构、面向对象编程、数据库交互以及现代框架的应用PHP通过系统化的学习,您将掌握专业的开发技能,能够独立开发和维护各PHP类应用程序我们的教学注重理论与实践结合,每个知识点都配有详细Web的代码示例和项目练习什么是PHP服务器端脚本语言()是一种专为开发设计PHP PHP:Hypertext PreprocessorWeb的服务器端脚本语言,创建于年,最初由开1994Rasmus Lerdorf发它可以嵌入中执行,生成动态网页内容HTML广泛应用场景主要用于开发动态网站、内容管理系统、电子商务平台和企业应PHP用知名产品如、和都使用构WordPress FacebookWikipedia PHP建,证明了其在大规模应用中的稳定性市场主导地位的特点PHP开源免费,跨平台易学易用,社区庞大是完全开源的技术,任语法简单直观,入门门PHP PHP何人都可以免费使用和修改槛低,特别适合初学者庞大它支持、、的全球开发者社区提供了丰富Windows Linux等多种操作系统,让的学习资源、开源项目和技术macOS开发者可以在不同平台间无缝支持,遇到问题总能找到解决切换工作环境方案支持主流服务器Web可以与、、等主流服务器无缝集成,且配PHP ApacheNginx IISWeb置简单这种灵活性使成为众多网站首选的后端技术,适应各种PHP部署环境的应用领域PHP开发API微信小程序后端适合开发,为PHP RESTful API可作为微信小程序的后端服移动应用和前端框架提供数据服网站与电商平台PHP务,处理数据存储、用户认证和务使用或等框Laravel SlimPHP是构建各类网站的理想选业务逻辑,与小程序前端实现无架,可快速构建安全、高效的微服务架构择,从个人博客到企业官网电缝对接,支持高并发访问接口API商平台如、现代应用可采用微服务架Magento PHP都基于,构,将系统拆分为独立服务,提WooCommerce PHP支持复杂交易流程和用户管理系高可维护性和扩展性,适应云原统生部署环境课程结构与目标模块化课程内容从基础语法到高级应用逐步深入实践项目驱动通过真实案例巩固知识点独立开发能力培养毕业后能胜任开发工作PHP本课程采用循序渐进的教学方法,将复杂的开发知识分解为易于理解的模块每个模块都包含理论讲解和配套实践,确保学员真正掌PHP握技能而非仅仅了解概念通过完整项目的实战训练,学员将学习如何应用解决实际问题,培养独立思考和解决问题的能力课程结束时,您将具备独立开发中PHP小型应用的全面技能Web开发环境介绍PHP本地与远程部署比较常见开发环境方案PHP本地开发环境便于调试,修改即可见效果,适合初学者而远程•,稳定经典的LAMP:Linux+Apache+MySQL+PHP服务器部署则更接近生产环境,可测试真实性能,但调试和部署组合周期较长两者通常配合使用,本地开发后部署到远程服务器•,高性能方案LNMP:Linux+Nginx+MySQL+PHP•上的一键安装包,适合初学者WAMP/XAMPP:Windows初学者建议先以本地环境为主,掌握基础后再尝试远程部署流•容器化环境隔离且可移植,适合团队协作Docker程搭建开发环境()PHP Windows下载安装包访问官方网站,下载最新版本的安装包支持跨平台,而XAMPP/WAMP XAMPP专为设计,两者都提供图形化界面,操作简单直观WAMP Windows运行安装程序双击安装包,按向导提示完成安装建议选择默认安装路径,避免中文和特殊字符安装过程中可选择需要的组件,初学者建议全选配置服务安装完成后,启动控制面板,开启和服务可能需要配置防火墙允许Apache MySQL这些服务运行检查默认端口(,)是否被占用Apache:80MySQL:3306测试环境在浏览器中访问或查看是否显示默认页面http://localhost http://
127.
0.
0.1也可以访问测试数据库管理工具是否正常工作http://localhost/phpmyadmin搭建开发环境()PHP Mac/Linux环境设置Mac系统可以使用内置的和,或安装套件更推荐使用包管理器,通过Mac ApachePHP MAMPHomebrew简单命令安装所需组件•brew installphp•brew installmysql•brew servicesstart php•brew servicesstart mysql环境设置Linux系统使用包管理器安装和相关组件,以为例Linux PHPUbuntu•sudo aptupdate•sudo aptinstall apache2php libapache2-mod-php mysql-server php-mysql•sudo systemctlstart apache2•sudo systemctlenable apache2配置与优化安装完成后,可能需要修改配置文件以适应开发需求•PHP配置/etc/php/版本号/apache2/php.ini•Apache配置/etc/apache2/apache
2.conf•调整内存限制、上传文件大小等参数使用进行开发IDE PHP专业开发环境轻量级选择PHPStorm VS Code•智能代码补全与提示•免费开源,性能轻快•内置调试器和性能分析工具•丰富的插件扩展PHP•版本控制系统集成•(代码提示)PHP Intelephense•数据库管理工具•(调试支持)PHP Debug•单元测试和代码质量检查•(智能感知)PHP Intellisense是付费,提供天试用期,•PHP DocBlocker(文档注释)PHPStorm IDE30学生可申请免费教育版适合初学者和中小型项目开发,配VSCode置简单,资源占用少其他选择IDE•轻量级编辑器,速度快Sublime Text•可定制性强,丰富插件Atom•免费且功能全面NetBeans•企业级开发工具Eclipse PDTPHP根据个人习惯和项目需求选择合适的,初学阶段是性价比最高的选择IDE VSCode第一个程序PHP创建文件PHP在网站根目录(如的文件夹)中,创建名为的文件文件必须使XAMPP htdocshello.php PHP用扩展名,以便服务器识别并处理.php编写代码在文件中输入以下代码!DOCTYPE htmlhtmlheadtitle我的第一个PHP程序/title/headbodyh1php echo你好,世界!;/h1p当前时间是php echodateY-m-d H:i:s;/p/body/html运行程序确保服务器已启动,然后在浏览器中访问如果一切正常,PHP http://localhost/hello.php您将看到你好,世界!和当前时间显示在页面上语法基础PHP标记语句结构注释方式PHP代码需要包含在特定标记内,服务语句结构有以下特点支持三种注释风格PHP PHP PHP器才能识别并执行•每条语句以分号结束•单行注释这是单行注释echo Hello;//•标准标记php...•单行注释这也是单行注释#•短标记(需配置开启)•代码缩进不影响执行,但影响可读性...•多行注释这是多行注释/**/•脚本可以完全由组成,也可以嵌PHP•文档注释用于生成文档/***/入中•推荐使用个空格的缩进风格HTML4•大小写敏感(变量名区分大小写)变量与常量在中,变量是存储数据的容器,以美元符号开头,如变量名区分大小写,必须以字母或下划线开头,可包含字母、数字和下划线PHP$$name PHP是弱类型语言,不需要显式声明变量类型,同一变量可在运行时改变类型常量是一旦定义就不能更改的值,通常用大写字母命名定义常量使用函数或关键字或define constdefinePI,
3.14159const DATABASE=预定义了许多常量,如、、和等,可在任何脚本中直接使用mydb PHP PHP_VERSION TRUEFALSE NULL数据类型详解PHP标量类型复合类型•整数如、•数组有序映射,索引可以是数integer123-10array字或字符串•浮点数如、float
3.
142.5e3•对象类的实例,封装数据和•字符串如、objectstring HelloWorld行为•布尔或boolean truefalse•可迭代对象引入,iterable PHP
7.1会根据上下文自动转换类型,也可使用PHP可用于循环foreach、等进行显式转换int string数组是中最强大的数据类型之一,可以PHP存储多种类型的数据,构建复杂的数据结构特殊类型•资源外部资源的引用,如数据库连接resource•表示变量没有值NULL•回调可调用的函数或方法callable•混合类型可以是任何类型mixed引入了联合类型声明和更多类型相关特性,增强了类型系统的严谨性PHP8运算符使用类别运算符示例说明算术运算符加、减、乘、除、取+,-,*,/,%,**$a+$b模、幂赋值运算符等同于=,+=,-=,*=,/=,$a+=5$a=$a+5%=比较运算符等于且类型相同==,===,!=,!==,$a===$b,,=,=,递增递减前缀或后缀方式/++,--$a++,--$b逻辑运算符逻辑与、或、非,||,!,and,or,$a$bxor字符串运算符连接字符串.,.=$str
1.$str2三元运算符条件表达式:$a$b:$c合并运算符存在且不为则null$a$b$a null返回,否则返回$a$b字符串操作基础字符串定义支持单引号和双引号定义字符串单引号字符串不解析变量和转义序列PHP(除和外),性能更高;双引号字符串可直接嵌入变量,如\\\\\\Hello$name字符串连接使用点号连接字符串也可.$fullname=$firstname..$lastname;以使用操作符追加内容更多信息.=$message.=;常用字符串函数提供丰富的字符串处理函数获取长度,提取子串,PHP strlensubstr替换内容,查找位置,分割字符串等str_replace strposexplode格式化输出使用和格式化字符串,例如圆周率printf sprintfprintf:%.2f,输出保留两位小数
3.1415926控制流程语句条件语句语句根据条件执行代码块,可与和组合使用if elseelseifif$age18{echo未成年;}elseif$age60{echo成年人;}else{echo老年人;}选择语句语句根据变量值执行不同代码块switchswitch$fruit{case苹果:echo红色水果;break;case香蕉:echo黄色水果;break;default:echo未知水果;}循环语句支持多种循环结构PHP//for循环for$i=0;$i5;$i++{echo$i;}//while循环while$count0{echo$count--;}//do-while循环do{echo$num++;}while$num5;流程控制高级用法语句语句break continue用于提前退出循环或用于跳过当前循环迭代,break switchcontinue语句可以指定数字参数跳出多层直接开始下一次迭代同样支持数嵌套循环,如表示跳出两字参数,如跳过两层循break2continue2层循环这在处理多维数组或复杂环的当前迭代这可用于在复杂条嵌套结构时特别有用件下过滤不需要处理的数据语句goto引入了语句,可以跳转到脚本中标记的位置尽管功能强大,但滥PHP
5.3goto用会导致面条式代码,使程序难以理解和维护推荐仅在特定场景下谨慎使用goto skip;echo这行不会执行;skip:echo直接跳到这里;包含与代码重用包含文件的方法适用场景与最佳实践提供四种包含外部文件的函数,它们在错误处理和执行时选择合适的包含方式对代码组织至关重要PHP机上有所不同•用于必不可少的文件(如配置文件)require•找不到文件时产生警告,继续执行include•用于可选内容(如模板文件)include•找不到文件时产生致命错误,停止执行require•版本用于防止函数重定义或类重复声明*_once•确保文件只被包含一次include_once•推荐使用绝对路径或相对于项目根目录的路径•同上,但错误处理更严格require_once•可定义常量使路径管理更一致BASE_PATH函数定义与调用函数高级特性可变函数、匿名函数、箭头函数返回值处理单值返回、多值返回数组、引用返回参数传递按值传递、引用传递、默认参数、可变参数基本语法结构关键字、函数名、参数列表、函数体function函数是代码重用的基本单元,使用关键字定义函数名不区分大小写,但建议保持一致的命名风格函数必须先定义后使用,除非使用了条件定PHP function义或在类中定义为方法新增了标量类型声明和返回类型声明功能,如进一步增强了类型系统,支持联合类PHP7function addint$a,int$b:int{return$a+$b;}PHP8型和混合类型string|int mixed常用内置函数字符串处理函数数组操作函数•获取字符串长度•计算数组元素数量strlen-count-•替换字符串内容•添加str_replace-array_push/array_pop-/移除末尾元素•提取子字符串substr-•合并数组•大小写array_merge-strtolower/strtoupper-转换•过滤数组元素array_filter-•移除空白字符•排序数组trim-sort/rsort-•拆分连接字•检查元素是否存在explode/implode-/in_array-符串日期与时间函数•当前时间戳time-UNIX•格式化日期date-•解析文本日期strtotime-•创建对象date_create-DateTime•计算日期差异date_diff-•修改日期date_modify-用户自定义函数进阶变量作用域可变参数有全局作用域和函数作用域函数PHP引入的运算符允许函数接收PHP
5.
6...内默认无法访问全局变量,需使用不定数量的参数function关键字或数组global$GLOBALS在函数内部,sum...$numbers{}或global$count;这些参数以数组形式访问也可用于展静态变量$GLOBALS[count]开数组传递给函数sum...$array在函数调用间保持值static箭头函数匿名函数引入的简洁语法不需命名的函数,常用于回调PHP
7.4$add=$greet箭头函数自fn$a,$b=$a+$b;=function$name{return Hello动从父作用域继承变量,无需关键关键字可捕获外部变use$name;}use字,且总是返回表达式的值,不需量$multiplier=function$n语句return use$factor{return$n*$factor;}数组基础35数组类型创建方式支持三种主要数组类型索引数组(数字键)、数组可以通过函数或短语法创建可以预PHP array[]关联数组(字符串键)和多维数组(嵌套数组)一设键值对、只设值(自动分配索引)或创建空数组后个数组中可以混合使用不同类型的键和值添加元素后推荐使用简洁语法PHP
5.4[]4遍历方法循环是遍历数组的最佳方式,可获取值或键foreach值对或foreach$arr as$value foreach$arr as也可用循环遍历索引数组$key=$value for数组是中最强大和常用的数据结构,能存储任意类型的数据,包括其他数组和对象数组实际上是PHP PHP有序映射,在底层实现为哈希表,提供高效的查找和操作性能初学者应重点掌握数组的创建、访问和遍历方法,为后续学习高级数组操作和数据处理打下基础实际开发中,数组广泛用于存储配置、表单数据、数据库查询结果等多种场景数组操作函数超全局变量超全局变量是预定义的特殊数组,在所有作用域中自动可用,无需使用关键字声明和分别用于获取PHP global$_GET$_POST URL查询参数和表单提交数据适用于无副作用的请求,如搜索;而适用于修改数据或含敏感信息的请求$_GET$_POST存储跨请求的用户数据,实现状态管理保存在客户端的小型数据包含上传文件的信息$_SESSION$_COOKIE$_FILES包含服务器环境和请求信息,如路径、地址等保存环境变量包含所有全局变量$_SERVER IP$_ENV$GLOBALS$_REQUEST合并了、和,但不推荐使用,因为可能混淆数据来源$_GET$_POST$_COOKIE表单与交互PHP表单定义使用创建表单,指定(处理脚本)和(提交方式)表单元素必须有属性才能被接收HTML actionmethod namePHPform action=process.php method=postinput type=text name=usernameinput type=submit value=提交/form数据接收根据表单的属性,使用或获取提交的数据文件上传需使用数组和method$_POST$_GET$_FILES enctype=multipart/form-data//process.php$username=$_POST[username];//防止未设置导致的警告数据验证永远不要信任用户输入,必须进行验证和过滤使用或正则表达式验证数据格式filter_varif!filter_var$email,FILTER_VALIDATE_EMAIL{echo无效的邮箱格式;}安全处理使用防止攻击,防止注入输入过滤,输出转义是基本原则htmlspecialchars XSSprepared statementsSQL//安全显示用户输入echo htmlspecialchars$username;面向对象初识类与对象基本概念属性和方法的访问控制类是对象的蓝图或模板,定义了一组属性(数据)和方法(行为)对象是类的实提供三种访问修饰符,控制属性和方法的可见性PHP例,代表具体事物使用关键字定义类,使用关键字创建对象PHP classnew•可从任何地方访问public•只能在当前类和子类中访问protectedclass Person{//属性(成员变量)•private仅在当前类内访问public$name;类中可使用关键字引用当前对象静态属性和方法使用关键字声明,通$this staticpublic$age;过类名和双冒号访问(不需实例化)Person::staticMethod//方法(成员函数)面向对象编程有三大特性封装、继承和多态,通过这些特性可以构建可维护、可public functionsayHello{扩展和可复用的代码return你好,我是{$this-name};}}//创建对象$person=new Person;$person-name=张三;echo$person-sayHello;//输出你好,我是张三构造函数与析构函数构造函数构造函数在对象创建时自动调用,用于初始化对象属性前可使用与类同名的方法作为构造函数,但现已弃用__construct PHP7class User{private$name;private$email;//构造函数public function__construct$name,$email{$this-name=$name;$this-email=$email;echo用户{$this-name}已创建;}}对象生命周期对象的生命周期从创建(关键字)开始,到对象不再被引用或脚本结束时终止在对象生命周期内可以调用各种方法操作对象状态PHP new//创建对象$user=new User李四,lisi@example.com;//使用对象$user-sendEmail欢迎信息;//对象生命周期结束$user=null;//手动触发垃圾回收析构函数析构函数在对象被销毁前自动调用,用于清理资源常用于关闭文件、数据库连接等释放资源的操作__destructpublic function__destruct{//关闭数据库连接$this-dbConnection-close;echo用户{$this-name}对象已销毁;}继承与多态接口()Interface纯抽象,只定义方法签名不实现抽象类()Abstract Class部分实现,包含抽象方法和具体方法继承()Inheritance子类继承父类特性,可重写扩展方法/基本类()Base Class定义属性和方法的具体实现通过关键字实现单继承,子类可以继承父类的属性和方法使用方法名可调用父类方法关键字可防止类被继承或方法被重写PHP extendsparent::final不支持多继承,但可通过实现多个接口()来达到类似效果PHP interfaces抽象类()不能直接实例化,必须被继承接口()则定义了类必须实现的方法契约多态允许不同类的对象对同一消息做出不同响abstract classinterface应,通过方法重写和类型提示实现这三种机制共同构成了面向对象编程的基础,使代码更具扩展性和维护性PHP魔术方法和命名空间常用魔术方法属性访问控制命名空间使用•__construct/__destruct构造和析构命名空间解决类名冲突,类似文件目录结构class User{•__get/__set访问未定义属性时调用private$data=[];//定义命名空间•__call/__callStatic调用未定义方法时触发namespace App\Models;•__toString将对象转为字符串//访问不存在的属性时调用•__clone克隆对象时定制行为public function__get$name{class User{}return$this-data[$name]null;•__sleep/__wakeup对象序列化和反序列化}//使用命名空间use App\Models\User;//设置不存在的属性时调用$user=new User;public function__set$name,$value{$this-data[$name]=$value;//或完全限定名称}$user=new\App\Models\User;}引入组合声明,可导入多个类PHP
7.0use useApp\Models\{User,Product,Order};错误与异常处理PHP错误级别与配置定义了多种错误级别,从致命错误到通知不等通过函数或配置文件可以控制显示哪些级别的错误PHP E_ERROR E_NOTICE error_reporting php.ini//显示所有错误error_reportingE_ALL;ini_setdisplay_errors,1;//生产环境建议error_reportingE_ALL;ini_setdisplay_errors,0;ini_setlog_errors,1;ini_seterror_log,/path/to/error.log;异常捕获机制引入的结构可以捕获和处理异常,避免程序中断PHP5try-catchtry{$result=divideNumbers10,0;echo$result;}catch DivisionByZeroError$e{//处理除零错误echo除数不能为零:.$e-getMessage;}catch Exception$e{//处理其他异常echo发生错误:.$e-getMessage;}finally{//无论是否发生异常都会执行echo计算结束;}自定义异常类可以扩展基础类创建自定义异常,更精确地区分不同错误类型Exceptionclass DatabaseExceptionextends Exception{protected$query;public function__construct$message,$query=,$code=0{$this-query=$query;parent::__construct$message,$code;}public functiongetQuery{return$this-query;}}文件操作基础打开文件使用函数打开文件,指定打开模式fopen•r-只读(文件必须存在)•w-只写(不存在则创建,存在则清空)•a-追加写入(不存在则创建)•r+-读写(文件必须存在)•w+-读写(不存在则创建,存在则清空)•a+-读取和追加(不存在则创建)$handle=fopendata.txt,r;读取文件多种方式读取文件内容•fread-按字节数读取•fgets-读取一行•fgetcsv-读取并解析CSV行•file_get_contents-一次读取整个文件$content=file_get_contentsdata.txt;写入文件写入内容到文件写入字符串•fwrite/fputs-写入格式数据•fputcsv-CSV一次写入整个字符串•file_put_contents-file_put_contentslog.txt,$message,FILE_APPEND;关闭文件与管理操作完成后必须关闭文件句柄处理文件路径和权限•fclose-关闭文件句柄•is_readable/is_writable-检查权限目录与文件管理目录操作函数文件管理函数提供了丰富的目录操作函数列出文件管理函数用于操作单个文件删除文PHP scandirunlink目录内容,创建新目录,删除目件,重命名或移动文件,复制文mkdir rmdirrename copy录,检查路径是否为目录可以通过这些函件,和获取路径信息结is_dir pathinfobasename数实现文件系统的自动化管理合这些函数可以构建完整的文件管理系统//列出目录内容//移动文件$files=scandir/path/to/dir;renamesource.txt,destination/file.txt;//创建目录,设置权限为0755mkdir/path/to/newdir,0755,true;//获取文件信息//true表示递归创建$info=pathinfo/path/to/file.txt;echo$info[extension];//输出:txt文件查找与遍历对目录进行递归操作时,可以使用和类,它们提供了RecursiveDirectoryIterator RecursiveIteratorIterator高效查找和遍历目录树的能力函数则支持使用模式匹配查找文件glob//查找所有PHP文件$phpFiles=glob*.php;//递归遍历目录$iterator=new RecursiveIteratorIteratornewRecursiveDirectoryIterator/path/to/dir;与机制Cookie Session基础管理Cookie Session是存储在用户浏览器中的小型文本文件,服务器通过响应头设置,浏将数据存储在服务器端,仅在客户端保存一个会话(通常通过)Cookie HTTPSession IDCookie览器在后续请求中自动附加使用函数创建这使得适合存储敏感信息和大量数据PHP setcookieCookie Session//设置Cookie,有效期30天//启动或恢复会话setcookie session_start;username,//名称user123,//值//存储数据time+30*24*3600,//过期时间$_SESSION[user_id]=12345;/,//路径$_SESSION[login_time]=time;example.com,//域true,//仅HTTPS//读取数据true//仅HTTP协议访问$userId=$_SESSION[user_id]0;;//销毁会话//读取Cookie session_destroy;$username=$_COOKIE[username];默认情况下,数据存储在服务器的临时文件中,但可配置为使用数据库或Session适合存储非敏感、小量数据(通常不超过),如用户偏好设置、跟踪缓存系统存储,提高性能和可扩展性会话超时时间可通过中的Cookie4KB php.ini等设置ID session.gc_maxlifetime安全Session会话劫持防护会话固定攻击防御会话劫持是攻击者获取用户会话,冒充合ID会话固定攻击是攻击者预先设置会话,诱ID法用户的攻击防护措施包括使用HTTPS导用户使用该登录登录后立即调用ID加密传输,设置和标志,定secure httponly重新生成会话session_regenerate_idtrue期重新生成会话,检验地址和ID IPUser-可有效防御此类攻击ID等Agent会话生命周期管理会话存储安全设置合理的会话超时时间,实现自动注销功默认的文件存储可能面临权限问题考虑使能,提供记住我选项时使用安全的令牌机用加密存储,或将会话数据存储在、Redis制而非延长会话生命期这有助于减少会话等缓存系统中,减少文件系统Memcached被滥用的风险访问风险网络与协议HTTP请求基础HTTP理解等方法和请求结构GET/POST响应头设置使用控制响应PHP HTTP状态码管理返回正确的状态HTTP协议是应用的基础,作为服务器端语言,可以完全控制响应使用函数可以设置各种头信息,如内容类型、重定HTTP Web PHP HTTPheader HTTP向、缓存控制等例如设置返回格式数据,实现页面重定向headerContent-Type:application/json JSONheaderLocation:index.php可通过超全局变量获取请求信息,如获取请求方法,PHP$_SERVER HTTP$_SERVER[REQUEST_METHOD]$_SERVER[HTTP_USER_AGENT]获取用户浏览器信息,获取客户端地址在处理时,可通过获取原始请求体数$_SERVER[REMOTE_ADDR]IP APIfile_get_contentsphp://input据,特别适用于处理或格式的请求JSON XML开发基础RESTful API架构原则实现REST PHP RESTful API()是一种软件架构风格,强调使用实现的基本步骤REST RepresentationalState TransferPHPRESTAPI•资源导向-使用URI标识资源
1.获取HTTP请求方法$_SERVER[REQUEST_METHOD]•HTTP方法语义-GET读取,POST创建,PUT更新,DELETE删除
2.分析URI确定请求资源•无状态-服务器不存储客户端状态
3.根据方法执行相应操作CRUD•统一接口-标准化请求/响应格式
4.设置合适的状态码•HATEOAS-超媒体作为应用状态引擎
5.返回JSON/XML格式的响应实现使服务更易于理解、使用和扩展RESTfulAPIWeb//简单路由示例$method=$_SERVER[REQUEST_METHOD];$uri=parse_url$_SERVER[REQUEST_URI],PHP_URL_PATH;$uri=explode/,$uri;//设置内容类型为JSONheaderContent-Type:application/json;//根据方法和路径处理请求if$uri
[1]==users{if$method==GET{//获取用户列表或单个用户if isset$uri
[2]{echo json_encodegetUser$uri
[2];}else{echo json_encodegetAllUsers;}}}数据库基础与简介MySQL数据库基本概念数据库是结构化数据的集合,可高效地存储、检索和管理数据关系型数据库使用表格组织数据,表之间通过关系连接是最流行的开源关系型数据库管理系统,特MySQL别适合应用Web模型E-R实体关系图图是设计数据库的有力工具,它描述了数据模型中的实体类型及其关系实体表示为矩形,属性为椭圆,关系为菱形主要关系类型包括一对
一、一对多和E-R多对多,合理设计这些关系对数据库性能至关重要表设计原则良好的表设计应遵循数据库范式理论,避免数据冗余和异常每个表应有主键,合理使用外键维护引用完整性数据类型应根据实际需求选择,如使用而非存TINYINT INT储小范围整数,节省存储空间索引应用在频繁查询的字段上,但过多索引会影响写入性能连接数据库PHP MySQL扩展扩展mysqli PDO()是后引入的专用扩展,支持面向对象和过程式两种编程风格()是一个数据库抽象层,支持多种数据库系统,便于切换数据库mysqli MySQLImproved PHP
5.0MySQL PDO PHP DataObjects//面向对象方式try{$mysqli=new mysqli//创建连接localhost,//主机$pdo=new PDOusername,//用户名mysql:host=localhost;dbname=database;charset=utf8mb4,password,//密码username,database//数据库名password,;[PDO::ATTR_ERRMODE=PDO::ERRMODE_EXCEPTION];if$mysqli-connect_errno{die连接失败:.$mysqli-connect_error;//查询}$stmt=$pdo-querySELECT*FROM users;//查询//处理结果$result=$mysqli-querySELECT*FROM users;while$row=$stmt-fetchPDO::FETCH_ASSOC{echo$row[username].//处理结果;while$row=$result-fetch_assoc{}echo$row[username].}catch PDOException$e{;die连接失败:.$e-getMessage;}}//关闭连接的优势在于统一的接口,支持种以上数据库,使用预处理语句和绑定参数提供更好的安全性,适合需PDO API12$mysqli-close;要数据库无关的应用开发相比旧的扩展提供了更丰富的功能,如预处理语句、事务支持、多语句查询和存储过程mysqli mysql数据库增删改查操作与预处理语句PDO1预处理语句基础预处理语句是客户端服务器端交互的特殊协议,将语句模板与数据分离处理语句先发送到数据库服务器预编译,然后参数值通过单独的通道/SQL SQL传输执行//创建预处理语句$stmt=$pdo-prepareSELECT*FROM usersWHERE username=:username;//绑定参数$stmt-bindParam:username,$username,PDO::PARAM_STR;//或直接在执行时绑定$stmt-execute[username=$username];防注入SQL注入是常见的网络攻击,攻击者通过在输入中插入代码修改查询逻辑预处理语句本质上防止了这种攻击,因为参数值永远被视为数据而非SQL SQL代码的一部分SQL//不安全的方式(容易被注入)$query=SELECT*FROM usersWHERE username=$username;//安全的方式(预处理语句)$stmt=$pdo-prepareSELECT*FROM usersWHERE username=;$stmt-execute[$username];即使用户输入如,预处理语句也会将其作为完整字符串处理,而不会改变语义admin OR1=1SQL性能优化建议预处理语句不仅提高安全性,还可能提升性能,特别是重复执行类似查询时数据库服务器可以缓存预编译的语句,减少解析和优化开销•对批量操作使用事务提高效率•合理使用索引加速查询•避免SELECT*,只查询需要的列•使用连接池减少连接开销•考虑缓存频繁查询的结果数据显示与分页子句应用LIMIT的子句用于限制结果集的行数接受一个或两个参数偏移量和行MySQL LIMITLIMIT数据查询与计数数分页查询使用当前页码计算偏移量实现分页的第一步是知道总记录数使用函数计算总数,然后根据页码和每页显COUNT示数量确定查询范围//计算偏移量$currentPage=isset$_GET[page]int$_GET[page]:1;//获取总记录数$offset=$currentPage-1*$recordsPerPage;$stmt=$pdo-querySELECT COUNT*FROM products;$totalRecords=$stmt-fetchColumn;//查询当前页数据$stmt=$pdo-prepare//计算总页数SELECT*FROM productsORDER BYname LIMIT:offset,:limit1$recordsPerPage=10;;$totalPages=ceil$totalRecords/$recordsPerPage;$stmt-bindParam:offset,$offset,PDO::PARAM_INT;$stmt-bindParam:limit,$recordsPerPage,PDO::PARAM_INT;$stmt-execute;数据展示获取数据后,使用循环遍历结果集,格式化并显示每条记录常用的是表格或列表布局分页导航UI//显示数据创建分页控件,显示页码链接和上一页下一页按钮根据总页数和当前页码生成适当的导echo;/航元素while$row=$stmt-fetchPDO::FETCH_ASSOC{echo;echo;//分页控件echo;echo echo;}上一页上一页页码;//if$currentPage1{echo;}//for$i=1;$i=echo$totalPages;$i++{if$i==$currentPage{echo$i;}else下一页下{echo$i;}}//if$currentPage$totalPages{echo一页;}echo..htmlspecialchars$row[price];htmlspecialchars$row[name]..;框架与架构概述MVC视图层()View处理数据展示和用户界面1控制器层()Controller处理请求并协调模型和视图模型层()Model3业务逻辑和数据操作()是一种软件架构模式,将应用程序分为三个相互关联的组件,实现关注点分离模型层处理数据和业务逻辑;MVC Model-View-Controller视图层负责信息展示;控制器层接收用户输入并调用模型和视图这种分离使代码更加模块化、可维护和可测试主流框架如、、和都采用架构是当前最流行的框架,提供优雅的语法、强大的PHP LaravelSymfony CodeIgniterYii MVCLaravel PHPORM()、完整的中间件系统和丰富的开发工具组件被广泛使用,甚至被等其他框架采用以轻量级和高性Eloquent SymfonyLaravel CodeIgniter能著称,学习曲线较平缓,适合初学者框架使用可以显著提高开发效率,减少重复劳动,提供统一的最佳实践使用管理依赖Composer安装与配置是的依赖管理工具,类似于的或的安装后,可以通过命令行管理项目依赖Composer PHPNode.js npmPython pipComposer•Windows下载并运行Composer-Setup.exe•Mac/Linux运行安装脚本•验证安装composer--version默认使用作为包仓库,存储了数万个开源包Composer Packagist.org PHP基本语法composer.json每个项目都有一个文件,定义项目依赖和配置Composer composer.json{name:vendor/project-name,description:项目描述,type:project,require:{php:=
7.4,monolog/monolog:^
2.3,guzzlehttp/guzzle:^
7.0},require-dev:{phpunit/phpunit:^
9.5},autoload:{psr-4:{App\\:src/}}}其中指定运行时依赖,指定开发时依赖,定义自动加载规则require require-dev autoload常用命令提供多种命令管理依赖Composer•composer init交互式创建composer.json•composer requirepackage/name添加新依赖•composer install安装所有依赖•composer update更新所有依赖•composer removepackage/name移除依赖项目结构规范目录组织命名约定规范PSR现代项目通常遵循类似的目录结构,确保代码组织清晰遵循一致的命名规范提高可读性和维护性标准推荐()是由PHPPHPPHP StandardsRecommendations组织制定的编码标准PHP-FIG•类名大驼峰命名法(PascalCase),如UserController/project-root•方法名小驼峰命名法(camelCase),如getUserById•PSR-1基本编码规范/src#源代码目录/Controllers#控制器•属性/变量小驼峰或下划线分隔(_),如$userName或•PSR-2/PSR-12编码风格指南/Models#数据模型$user_name•PSR-4自动加载规范/Services#业务逻辑•常量全大写下划线分隔,如MAX_UPLOAD_SIZE•PSR-7HTTP消息接口/Views#视图模板•命名空间大驼峰,通常对应目录结构,如•PSR-11容器接口/config#配置文件App\Controllers•PSR-15HTTP处理器/public#公共访问目录index.php#入口文件遵循这些标准使代码更一致,便于不同项目间的协作可使用assets/#静态资源PHP_CodeSniffer等工具检查代码是否符合PSR标准/tests#单元测试/vendor#Composer依赖.gitignore#Git忽略文件composer.json#Composer配置将文档直接访问限制在目录,增强安全性使用入口文件public前端控制器模式处理所有请求安全开发实践PHP输入验证与过滤攻击防护XSS•永远不信任用户输入,所有数据必须验证•跨站脚本XSS是最常见的Web攻击•使用filter_var和filter_input过滤变量•总是对输出到HTML的数据进行转义•针对不同数据类型使用适当的过滤器•使用htmlspecialchars转换特殊字符•对数据库查询使用预处理语句•设置Content-Security-Policy头限制脚本执行•自定义验证逻辑时使用白名单而非黑名单•使用模板引擎自动转义机制//邮箱验证示例//安全输出用户数据if!filter_var$email,FILTER_VALIDATE_EMAIL{echo htmlspecialchars$userComment,ENT_QUOTES,UTF-8;throw newException无效的邮箱格式;}//设置CSP头headerContent-Security-Policy:default-src self;//整数过滤示例$id=filter_var$input,FILTER_SANITIZE_NUMBER_INT;防护技巧CSRF•跨站请求伪造攻击利用用户已认证的会话•生成并验证一次性令牌防护CSRF•检查Referer头(辅助措施)•使用同步令牌模式保护表单提交添加到•SameSite=Lax Cookie//生成CSRF令牌$_SESSION[csrf_token]=bin2hexrandom_bytes32;//表单中添加令牌echo;//验证令牌if!hash_equals$_SESSION[csrf_token],$_POST[csrf_token]{dieCSRF验证失败;}性能优化与调试60%80%启用数据库查询优化OPcache的操作码缓存可提升脚本执行速度达优化数据库查询可减少高达的页面加载时间使用PHP60%80%将编译后的脚本字节码存储在共享内存中,避免分析,添加适当索引,避免,OPcache EXPLAINSQL SELECT*重复解析和编译代码,大幅降低服务器负载使用连接池,实现查询缓存等措施能显著提高性能PHP35%代码级优化精细的代码优化可提升性能约包括减少文件包含,35%使用单例模式,避免全局变量,优化循环,使用内置函数替代自定义函数等技术,都能降低资源消耗性能调优应以测量为基础,而非凭直觉可使用、或等工具分析性能瓶颈是流行Xdebug BlackfireNewRelic Xdebug的调试扩展,提供代码覆盖率、函数跟踪、内存分析等功能,配合如可实现断点调试和变量监视PHP IDEPHPStorm对于缓存策略,应用可在多个层级实现用于数据缓存,缓存字节码,存储会PHP APCuOPcache Redis/Memcached话和应用数据,浏览器缓存静态资源,分发内容合理应用这些缓存技术,并使用适当的缓存失效策略,可显著提CDN高应用响应速度和承载能力日志管理与监控日志级别与分类库应用告警机制与监控Monolog应用程序应实现结构化日志,根据是的标准日志库,支持多生产环境应建立健全的监控和告警系PHP MonologPHP严重性分级(错误)、种处理器和格式化器,可将日志发送到统,及时发现并响应异常可监控的指ERROR(警告)、(信文件、数据库、邮件或外部服务通过标包括错误率、响应时间、内WARNING INFOCPU/息)、(调试)不同级别的安装存使用、数据库连接数、缓存命中率DEBUG Composercomposer require日志可存储在不同文件或渠道,便于管,然后配置处理器等当关键指标超过阈值时,通过邮monolog/monolog理和分析系统日志、访问日志、错误链和日志通道,实现灵活的日志管理件、短信或企业通讯工具发送告警日志和业务日志应分开存储可集成栈(、ELK Elasticsearch、)或进行Logstash KibanaGrayloguse Monolog\Logger;集中式日志管理,实现日志聚合、搜索use和可视化分析、New RelicDatadogMonolog\Handler\StreamHandle等工具提供更全面的应用性能监APMr;控//创建日志通道$log=new Loggerapp;$log-pushHandlernewStreamHandler__DIR__./logs/app.log,Logger::WARNING;//记录日志$log-error数据库连接失败,[ip=$serverIP];与前端协作开发与数据交互跨域资源共享Ajax JSONCORS现代应用通常采用前后端分离架构,作为后端提供者,与前端当和前端部署在不同域名时,需要处理跨域资源共享问题服务器需WebPHPAPI APICORS PHP通过交互设置适当的头允许跨域请求JavaScript AjaxHTTP//PHP端处理请求并返回JSON//允许特定域名访问headerContent-Type:application/json;headerAccess-Control-Allow-Origin:https://frontend.example.com;$data=[status=success,//允许的请求方法message=数据已保存,headerAccess-Control-Allow-Methods:GET,POST,OPTIONS;user=[id=123,//允许的请求头name=张三headerAccess-Control-Allow-Headers:Content-Type,]Authorization;];//预检请求缓存时间echo json_encode$data;headerAccess-Control-Max-Age:86400;的和函数用于在数组对象和字符串之//允许发送认证信息PHP json_encode json_decode PHP/JSON间转换设置可正确处理中文字符,对h于eaderAcc预es检s-请Co求n,tr应ol返-A回llow-C状r态ed码en而ti不al执s:行实tr际ue业务;逻辑可考虑使用中JSON_UNESCAPED_UNICODE OPTIONS200使输出更易读间件统一处理配置,避免代码重复JSON_PRETTY_PRINT CORS新技术与趋势带来了重大改进,包括编译器提升性能,命名参数简化函数调用,联合类型增强类型系统,构造器属性提升减少样板代码,PHP
8.x JIT表达式替代,运算符简化空值处理,以及新的内置函数和改进的错误处理这些特性使代码更简洁、安全和高效match switchnullsafe扩展为带来了异步非阻塞和协程能力,使可处理高并发场景它提供了内置服务器、异步任务系Swoole PHPI/OPHPHTTP/WebSocket统和协程数据库客户端,性能远超传统此外,微服务架构、容器化部署()、无服务器架构PHP-FPM Docker/Kubernetes()也成为开发新趋势,使应用更具弹性和可扩展性Serverless PHP总结与问题解答基础知识回顾数据库交互精要我们学习了的核心语法、数据类型、控数据库操作是应用的核心部分,我们详PHPPHP制流程、函数和面向对象编程基础这些是细讲解了数据库连接、操作、预处理CRUD构建任何应用的基石,掌握这些知识点语句和注入防护这些技能直接关系到PHP2SQL对理解更高级的概念至关重要应用的功能实现和安全性高级主题与应用安全开发实践课程后半部分涵盖了框架使用、性能优化、安全是贯穿整个课程的重要主题,我们学习前后端交互等高级主题,为实际项目开发做了输入验证、防护、防御和安全XSS CSRF好准备这些知识点帮助你从初学者迈向专会话管理等关键技术牢记这些实践,构建业开发者安全可靠的应用PHP Web本课程旨在为您提供全面的开发技能,从基础语法到高级应用我们鼓励在学习过程中大量实践,通过构建真实项目巩固所学知识记住,编PHP程能力的提升是一个持续的过程,需要不断学习和实践如有任何问题,无论是课程内容相关还是实际开发中遇到的困难,都欢迎随时提问我们也建议加入开发社区,与其他开发者交流经验,共同PHP成长祝您的开发之旅顺利愉快!PHP。
个人认证
优秀文档
获得点赞 0