关闭

关闭

封号提示

内容

首页 php指南白菜版20110420.pdf

php指南白菜版20110420.pdf

php指南白菜版20110420.pdf

上传者: qw1234 2012-01-25 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《php指南白菜版20110420pdf》,可适用于IT/计算机领域,主题内容包含PHP开发实用指南htttp:aiyooyoocomPHP实用指南前言对于一个已迈入PHP开发大门的初级程序员最需要的就是一本实用的开发参考书而不再符等。

PHP开发实用指南htttp:aiyooyoocomPHP实用指南前言对于一个已迈入PHP开发大门的初级程序员最需要的就是一本实用的开发参考书而不再是各种快速入门的onlyhellowold。鉴于目前市面上的PHP教程大多仅关注CURD操作或大篇幅讲解入门的HTML,CSS也有的书对许多概念浅尝辄止一提而过甚至错误连天或者仅仅局限于PHP一门技术或内容陈旧或者太过于晦涩枯燥的情况有的书又讲的太深太大块头作者利用业余时间写作此文档。此文档来源于作者的学习和实际开发经验语言风格轻松紧扣技术前缘富有启迪性。PHP作为一种灵活的展现层语言胶水语言用于粘合后端数据库和前端页面更多需要考虑和掌握的是数据库前端展示服务器配置和业务逻辑算法等。那我学的是不是太多了?不好比农民不仅要会种地还要会识字做小生意打零工。PHP程序员尤其不能局限在PHP这个框里这对你的发展是很不利的。本文档不适合刚接触计算机编程的以及仅仅是有一点感兴趣的童鞋。在参阅本文档前你至少应该满足以下条件:()学力高中以上计算机已入门。()肯动手动脑能独立思考有独立的人生观和世界观岁以上。()追求美追求优雅爱好艺术。本文将从PHP的安装基础语法调试部署代码优化OO扩展高级特性数据库技巧网络协议应用算法等讲起。由于作者经验有限书中大部分内容来自于作者自己的学习所得难免错误还望指正。但作者会尽力保证代码都是经过调试可运行的。本教程不是按部就班的教材也不是手册思维会比较跳跃。作者搭建环境:Winxp(Win,ubuntu,centos)phpapache(ngnix)MySQLPHP开发实用指南htttp:aiyooyoocomPHP实用指南作者简介:后非著名诗人建筑工人理性经济人程序员。昵称:白菜围脖:http:tqqcomwaitfox性别:X欢迎大家分发此文档让更多的人使用为国内php发展加力。本文大部分内容为原创部分来自于对网络资料的收集整理。未经作者同意不得将本资料用于商业用途转载请注明出处和作者欢迎转载。注:本指南中所提到的代码和习题答案可参考附件或与作者联系。作者观点:在思想面前一切都是浮云理论比实践更重要你自以为你的经验其实早就在理论中存在了数据结构算法数学英语逻辑在任何时候都很重要是衡量一个程序员技术档次高低的准尺理论=教科书课外书(参考书)工具书(手册)Google知识分享编程是一门艺术而你是一名艺术从业者简称艺人以无知为耻以求学为荣尊重佩服谦虚严谨知耻手册文档google是你最好的老师。工具是为人服务的而不是增加学习成本的。学习要渐进不要想着一口吃成架构师步子迈得太大会扯着蛋。最后更新:不要轻易相信网络上的任何教程不然你就会OUT也包括本指南。本指南计划章围绕php而不局限于php。PHP开发实用指南htttp:aiyooyoocomPHP实用指南第一篇:开发环境搭建和IDE使用做为本地快速开发这里主要介绍在win操作系统下的配置。为什么不推荐最简单的一键安装包呢因为在后期的应用中会涉及到对配置文件的修改同时一键安装包也不利于遇到问题时的排错。手工配置的经验也利于转移部署到linux上。为什么不推荐复杂的linux呢因为linux只是个工具其版本和依赖关系非常混乱不具有通用性不适合做为开发机。并且不值得为工具付出太多学习成本。Linux归在服务器配置和部署这一块。好钢要用在刀刃上。对于linux的一些东西我会在后期顺带提及。开发WIN,部署LINUX才是明智选择。第一章。手工安装和配置安装PHP到PHP官方网站下载PHP的win安装包。注意选择VCxThreadSafe的ZIP版本。(年月最新版出炉可以照样配置但部分第三方扩展会有兼容问题)http:wwwphpnetdownloadsphp释疑:如果你在apache下使用PHP你应该选择VC的版本。如果你在IIS下使用PHP应该选择VC的版本。VC的版本使用visualstudio编译VC使用VisualStudio编译并且改进了性能和稳定性。VC版本的PHP需要你安装MicrosoftCRuntime。不要在apache下使用VC的版本。TS指ThreadSafety即线程安全一般在IIS以ISAPI方式加载的时候选择这个版本。NTS即NoneThreadSafe一般以fastcgi方式运行的时候选择这个版本具有更好的性能。win下的FastCGI总是不太稳定的你可能需要打一些补丁或配合其他组件或者在Linux下会好一些。如果你需要下载较早版本的PHP可以看这里。http:wwwphpnetreleases。现在解压你的ZIP文件到任意目录如E:DEVPHP辟谣:安装PHP建议使用ZIP解压版。另外注意的是在win下安装PHP并不需要像网上所说的复制phpini到windows目录、复制xxxxxdll到system下神马设置环境变量等操作。IIS的话略有不同。安装Apache服务器。到Apache官方网站下载http:httpdapacheorg下载最新稳定版。一路next就可以了。安装MySQL。到Oracle官方下载MySQL最新版安装时我们选择自定义安装然后是开发机模式(这样的话有利于减少MySQL服务运行时的内存占用)。PHP开发实用指南htttp:aiyooyoocomPHP实用指南接下来选择multifunctionaldatabase(多功能数据库)以MyISAM作为主存储引擎。接下来的步骤按默认配置。直到这里如图接下来我们到了服务配置这一步。作为开发机不建议选中“launchtheMySQLserverautomatically”。建议选中下方的添加到环境变量。这样当你需要使用MySQL的话可以在运行框输入“netstartmysql”来启动服务“netstopmysql”来停止服务。PHP开发实用指南htttp:aiyooyoocomPHP实用指南接下来就是设置用户名和密码设置数据的存放目录可以根据需要自行填写。建议把MySQL的数据文件放到一个单独的目录下。在安装mysql时在最后一步可能无法启动服务可以看看你所设置的data目录下的err文件大多是innodb引擎启动失败。你可以在mysql安装目录下找到myini文件增加下面一行:tmpdir="E:datamysqlTemp"并且手动设置innodbbufferpoolsizeinnodblogfilesize。如果安装后无法登陆请在命令行执行:>mysqluroot>flushprivileges一般在进行升级或重新安装时这个问题出现频率很高。配置开发环境。到PHP安装目录下把phpinidevelopment更名为phpini做如下修改:找到DynamicExtensions组把一些常用的模块前面的分号去掉建议把MySQLMySQLi,PDO,CURL等模块都启用。设置或更改datetimezone=PRC设置或更改sessionsavepath="e:tempsession"(路径按自己的情况配置建议配置到单独目录)设置或更改extensiondir="e:devphpext"(路径按自己的情况配置)要禁止某些全局变量或调整优先级可以修改variablesorder禁用某些函数可以配置disablefunctions选项PHP开发实用指南htttp:aiyooyoocomPHP实用指南ignoreuserabort可以让你的PHP在浏览器关闭后依然运行计划任务等采用的就是这种技巧exposephp选项决定你是否向服务器暴露你所使用的脚本类型memorylimit默认M决定PHP运行允许的最大内存如果你的PHP程序运行时经常报内存溢出建议你把这个值调整为M。requestorder允许你调整GET和POST的优先顺序。uploadmaxfilesize=M允许上传文件的最大尺寸。同样的控制选项还有maxfileuploads。sessioncookiehttponly让你的Cookies不会被客户端语言如JavaScript读取到可防御XSS攻击。到Apache目录下找到confhttpdconf,做如下修改和配置。没有该选项则添加有则编辑。ServerRoot"E:devapache"设置Apache服务器的安装目录Listenlocalhost:设置Apache监听端口LoadModulephpmodulee:devphpphpapachedll装载PHP模块PHPIniDir"e:devphp"PHP配置文件目录DocumentRoot"e:wwwphp"网页文件的存放位置。<IfModuledirmodule>DirectoryIndexindexhtmlindexhtmindexphp<IfModule>添加PHP为默认索引文件在<IfModulemimemodule>配置组里添加AddTypeapplicationxhttpdphpphp也可以添加AddTypeapplicationxhttpdphphtml来个真正的伪静态。^^到这里就算配置好了。写一个测试文件<phpphpinfo()友情提示:如果是纯php文件的话或者是被include的纯php代码即没有html代码混编其中。我们建议你不要闭合php标签(省略末尾的>标志)。这样做是为了避免一些空白造成的输出问题。在SOAP这一节还会再次强调。命名为indexphp保存到wwwphp根目录下运行Apache启动服务打开http:你应该能看到你的PHP网页了。下面是一些常用的命令用来安装卸载服务等:httpdkinstalln"apache"安装apache服务httpdkuninstall卸载apache服务httpdV查看详细的版本信息httpdt检查配置文件语法PHP开发实用指南htttp:aiyooyoocomPHP实用指南scdeletemysql卸载win下的mysql服务mysqldinstallremove安装移除mysql服务你也可以在CLI模式下运行你的php文件如phpfmyphp。Cli模式下可以查看很多对我们有用的信息并且CLI模式下是不限时的可以运行一些耗时很长的操作。同时如果你用ueeditplus等编辑器可以用cli模式来运行你的脚本从而把这些编辑器改造成简单快速的IDE。可见cli还是挺有用的可以帮助我们完成一些很有用的事。恰逢一位童鞋在群里问到php在windows下与exe程序的交互。这里顺便提一下。结合网上提供的C操作sqlite的方法我们来写一个稍微复杂的应用体验一下。首先我用vc写一个exe程序代码如下:#include"stdafxh"#include<string>#include<iostream>#include<sstream>#include"sqlitelibsqliteh"**演示php调用C进行数据操作的过程。**#pragmacomment(lib,"sqlitelibsqlitelib")usingnamespacestdstaticintsqlcallback(void*notused,intargc,char**argv,char**szColName){intifor(i=i<argci){printf("s=sn",szColNamei,argvi=="NUL":argvi)}return}intmain(intargc,char*argv){stringname=""intage=stringbirthday=""if(argc>){cout<<"参数个数是"<<argc<<endlname=argvPHP开发实用指南htttp:aiyooyoocomPHP实用指南age=atoi(argv)birthday=argv}else{cout<<"没有获取足够的命令行参数请手工输入"<<endlcout<<"请依次输入姓名年龄生日"<<endlcin>>namecin>>agecin>>birthday}stringstreamstrStreamstrStream<<agestrings=strStreamstr()stringisql="insertintousersvalues('"name"',"s",'"birthday"')"cout<<isql<<endlconstchar*sSQL="createtableusers(useridvarchar()PRIMARYKEY,ageint,birthdaydatetime)"constchar*sSQL="select*fromusers"sqlite*db=char*pErrMsg=intret=以下代码有部分删减有兴趣的可查看附件中的完整代码连接数据库ret=sqliteopen("dbdb",db)printf("数据库连接成功!n")sqliteexec(db,sSQL,,,pErrMsg)执行插入记录SQLsqliteexec(db,isqlcstr(),,,pErrMsg)查询数据表sqliteexec(db,sSQL,sqlcallback,,pErrMsg)关闭数据库sqliteclose(db)db=return}编译成exe文件然后php代码:<phpechosystem('e:tempsqlitedemoexelala')需要注意的是()使用system函数来调用可执行函数在win下为文件名后空格加参数参数用空格隔开而不是逗号。PHP开发实用指南htttp:aiyooyoocomPHP实用指南()以命令行的方式传参数给exe在可执行文件里该是argv获取而不是scanf,cin等各种输入因为在这种情况下无法获取从php传来的输入。()Linux下的调用很简单就不说了。完整代码和示例见附件。虽然这种调用意义不大不过在某些特殊场合应该还是能派上用场的。可以把某些耗时大的操作或者是复杂的处理交给C来处理实现CS和BS的分工。当然了实际生产环境的分工并非如此。通常是C负责频繁大量的操作数据库而PHP只负责读数据库和简单写。在win下php还可以直接调用com组件来进行各种操作。后面还会讲到php调用java程序以及socket等等的各种调。第二章其他安装模式如果你希望你的PHP服务以FastCGI的模式运行可以参考本文:《windowsapachePHPfcgidfastcgi运行配置》http:aiyooyoocomindexphparchives如果你想尝试使用nginx或linux,可以看:《windows下手动配置nginxphp》http:aiyooyoocomindexphparchives《NginxxPHP(FastCGI)搭建胜过Apache十倍的Web服务器(第版)》。http:blogscomnginxphpv我们建议新手都从头开始手工安装配置一遍只要十分钟左右即可并不麻烦。在你经历了这个过程后为了方便以后的开发你可以使用集成包。这里我们推荐如下几款集成安装包:()WampServerWampServe集成了Apache、MySQL、PHP、phpmyadminxdebugsqlbuddy。有中文包管理方便比较干净,作者很勤快。五星级推荐。()XAMPP有各种操作系统下的版本集成了几乎所有扩展。五星级推荐。()CYDPHP集成PHPNginxMySQLmemcacheeAcceleratorXdebugphpMyAdminmysql管理以及CSS压缩linux终端仿真等多种小工具。五星级推荐。()Lnmp集成安装包。http:lnmporg还有phpnowphpstudyCoreAMP等几款不错的集成包供你选择对以一些不再维护的集成包就不再推荐了。具体可以参考这里:http:aiyooyoocomindexphparchives第三章.IDE工具PHP开发实用指南htttp:aiyooyoocomPHP实用指南工欲善其事必先利其器。作为php开发工具有人用vim有人用zendstudio有人用notepad也有用netbeansphpdesignerphpEdkomodeeclipsevsforphp,dreamweaver等等的。我试用过几乎所有的开发环境。大概总结一下。Vim结合插件功能强大但是要记忆的快捷键太多(这也是其杀手级应用)有过分技术流的嫌疑不太适合新人。Zendstudio目前最新版本为作为最正统的IDE它功能强大的过分臃肿笨重的过分吃内存的过分。Eclipse系列的产品包括一些修改版(ZS以上也是基于eclipse的)插件丰富但与其说它是php开发工具不如说是安装了php开发插件的javaide。它更适合java开发。因此我在这里仅推荐netbeans和phpdesigner两款IDE尤其是netbeans就是SUN公司推出的皇家Java开发工具今年已经年了,NetBeans在年的月份左右才开始支持PHP开发推出了相应的PHP版安装文件不大只有多M当然并没有包含Java运行环境这个需要独立安装。但是对于JAVA版的可以下载捆绑了JRE的安装包。NetBeans目前有JAVA,JAVAFX,JEE,C,PHP,RUBY,ALL一共个安装包最新版本为。NetBeans下载地址:http:wwwnetbeansorgdownloadsindexhtml注意:安装NetBeans最新版时需要Java(不支持java及以下版本)环境。您可以下载javacom上最新的Java版本。。特色功能:代码即时纠错功能CSS层叠样式表设计数据库管理丰富的插件和扩展php单元测试phpdocument生成代码模板zend框架支持。。。PHP开发实用指南htttp:aiyooyoocomPHP实用指南但是NETBEAN也是有缺点的及看你能不能忍受了。占用内存较大而且随着使用时间和打开文件的增加还会一直增加。即使手动释放也起效甚微。所以你的内存至少需要G。G以上为佳。基于java的软件都有这个问题如zendstudio同样如此不支持换行。纯属个人习惯。这个也许是NB的BUG也许是NB的设计理念。(我不喜欢你一行里写太长的代码我不认为是bug)乱码。也是最让人纠结的问题。由于其不能智能识别编码需要手工指定而且一旦乱码文件就回不去了尤其需要小心。错误提示。NB的错误提示有时有些不知所云很扯淡。对于ECLIPSE的介绍可以看这里。http:aiyooyoocomindexphptageclipse我发一下NetBeans官方的PHP版使用教程:http:wwwnetbeansorgkbtrailsphphtml。关于zendstudio,如果你的公司要求你使用它那么请到这里围观。http:wwwzendstudionet现在开发环境有了也许你还需要一个调试环境推荐xdebug插件。到xdebug官方下载和你的php版本对应的dll文件放置到phpext目录下然后修改phpini文件添加配置重启apache即可实现调试了。这里是我给出的phpini中的配置包含注释。xdebug用中括号表示出来的是模块名称它会在你的phpinfo信息中作为大的分隔的标题显示出来zendextension=E:tdphpextphpxdebugvcdll设置phpxdebug的dll文件路径和名称xdebugautotrace=OnXdebug会将php的对函数调用的监测的信息用文件格式输出来xdebugcollectparams=OnXdebug会将php的对函数调用的参数加入到函数过程调用的监测中xdebugcollectreturn=On将函数调用的返回值加入到函数过程调用的监测中xdebugtraceoutputdir="E:tddebug"设置的函数调用监测信息的输出路径xdebugprofilerenable=On这是效能监测的设置开关xdebugprofileroutputdir="E:tddebug"这是效能监测信息设置为on的情况下写入到profileroutputdir设置的路径中,会生成一个相应的文件xdebugremoteenable=onxdebugremotehandler=dbgpxdebugremotehost=localhostxdebugremoteport=PHP开发实用指南htttp:aiyooyoocomPHP实用指南最后的这四行是为了让ide与xdebug协作起来。我们可以在netbean中调试文件F逐行的来跟踪文件运行的每一步看到系统的每一步时候的输出F(步入)ctrlF(步出),F(步过)。在想中断调试的地方我们可以下断点进行调试。参考文章:http:aiyooyoocomindexphparchives关于php调试黑夜路人和雪候鸟有一个很全的文档你可以到这里围观http:blogcsdnnetheiyeshuwuarchiveaspx另外你还可以给你的php安装上eAcceleratorAPC等加速组件(关于这些组建的详细介绍可以百度)。这些组件都有对应的linux版和windows版。(有些php扩展没有windows版或者windows版较老你可以自行编译可以参考我博客上的一篇文章大部分编译都很简单我使用的php扩展都是我自己编译的。有些组件按我文章里提供的方法按部就班编译不了则你需要下载GCC把GCC的一些头文件移到windows上的VC对应的库中有些需要修改语法有些依赖于某些库有的代码中明确指定不支持win都要注意)。通常这些扩展只用于linux服务器下不建议在win中应用到生产中。但是我们有时需要在开发环境下熟悉这些扩展的使用则有必要在win下安装这些组件。安装eAccelerator:到http:eacceleratornet下载对应PHP版本的代码linux选择源码WIN选择到http:wwwsitebuddycomPHPAcceleratorseAcceleratorwindowsbinariesbuilds下载。把下载后的DLL文件拷贝到php的ext目录下在phpini文件中增加如下配置项eacceleratorzendextensionts="E:devphpexteAcceleratortsdll"extension="E:devphpexteAcceleratortsdll"eaccelerator可安装为zend扩展或普通扩展eacceleratorshmsize=""共享内存大小eacceleratorcachedir="e:tempeaccelerator"缓存文件的目录eacceleratorenable=""启动eaccelerator关闭eacceleratoroptimizer=""允许加速脚本执行eacceleratorlogfile="E:debugphpexlog"日志文件存放缓存命中的文件eacceleratornamespace=""缓存中的key前缀在虚拟主机中可在htaccess里设置eacceleratorcheckmtime=""是否自动检查缓存过期建议关闭。eacceleratordebug=""不记录日志eacceleratorfilter=""eacceleratorshmmax=""共享内存中可put进来的最大尺寸eacceleratorshmttl=""回收内存在未被使用过的文件eacceleratorshmpruneperiod=""多少秒回收一次内存在未被使用过的文件eacceleratorshmonly=""禁止缓存在磁盘上编译过后的文件,允许eacceleratorcompress=""eacceleratorcompresslevel=""最大压缩这样你就可以在win下体验eaccelerator了。APC的安装配置不再提及。另外有些时候为了解答自己的疑惑需要查看php的opcode那么你可以PHP开发实用指南htttp:aiyooyoocomPHP实用指南安装vld扩展详情见我博客。上述提到的扩展网上不容易找到的我均在win下编译了php的最新版可在附件中查看。好了现在php的IDE和调试环境都有了还缺啥呢?缺mysql的客户端GUI工具。在这里我强烈推荐HeidiSQL这款工具首先它是开源免费的其次其界面清晰体积小巧(仅M)便携(不需安装)功能不失强大目前的最新稳定版是的。官方地址:http:wwwheidisqlcom它还有一个nighty版本(频繁更新打补丁的版本可见作者很勤快)。再其次推荐navicat功能同样强大尤其是报表导出和数据同步。不过它是收费的但网上有最新版的破解软件。或者你也可以选择中规中矩的sqlyog(同样是收费版但网上的破解版较老)或者是大部分php集成安装包里的phpmyadmin这款网页版管理工具。不推荐phpmyadmin(除非你在用虚拟主机)这款web程序对存储过程触发器事件支持较差并且存在BS的局限性。(顺带说一句:那些认为BS是网络发展的趋势CS已经日薄西山的家伙都是脑残)同样我提醒你不要忘记学习命令行下黑纸白字的mysql的使用。第二篇:PHP基础语法篇第四章、基础语法变量概述注意了php里变量名的范围是azAZxfxffazAZxfxff*而不仅仅是数字字母下划线也就是说$姓名='白菜'这样的中文变量(,*这类字符不在这个正则内故仍然不是合法的变量名)也是合法的。虽然这样写不规范但是务必要认识到这点不要让常识欺骗了你。Php的变量是弱类型的但不代表没有类型。经常有人声称形如if(!empty($COOKIE'name')and!is($COOKIE'name'))这样的语句中empty()和is()是重复的。让我们看一下如下这段代码:<php$a=""vardump(empty($a))vardump(is($a))打印下输出我们就知道结果了。我想说的是苍井空!=苍井假幸好你不是小学生如果你连空和假都分不清的话是要被脾气不好的老师扇耳光还要被怀疑智商和理解力有缺陷的。当然这里的这两个函数并不严格的就是代表空和假的意思不过我想用这俩汉字来区分这俩函数还是比较靠谱的。如果你要严格的判断有时可以把==写成===。另外$this是一个特殊的变量它不能被赋值。还有一种语法现象叫可变变量即变量的变量代码如下:$a='hello'$$a='world'echo$hello将输出world。实际上$$a也就是$helloPHP开发实用指南htttp:aiyooyoocomPHP实用指南$$$a='anotherworld'echo$$$a你想一下会输出什么还是会报错?当然了这样的写法应该少用还有变量函数请勿滥用。有时候我们要在一个字符串中包含一个变量有的童鞋往往会这样写:<php$name="白菜"echo"thereare$namesinthefields"很明显php引擎无法判断你要解析的变量是$name还是$names你也不能不出错才怪一般新手常犯这种很隐蔽的错误。如下图这是来自PHPCHINA论坛的一个求助帖请帮助LZ解决下他的疑惑。解决这种错误可以有三种写法echo"thereare$name'sinthefields"变量后跟变量命名标识符外的字符变量遵循最小匹配echo"thereare{$name}sinthefields"echo"thereare${name}sinthefields"给变量或变量体加上花括号或者使用单引号。还有一类变量叫做预定义变量他们包括$GET,$SERVER,$REQUEST,$COOKIE,$SESSION,$ENV等它们有的本身也是一个数组。因此我也可以像操作普通变量一样来操作它们。$GET'HERO'大家看着都很正常但是$SERVER'teacher'="苍井空"有的童鞋就困惑了其实没什么两样因为$SERVER它再特殊也还是个变量。另外我们知道$REQUEST是一个包含了$GET$POST和$COOKIE的数组。但是他们不是简单的包含关系。$REQUEST是$GET$POST和$COOKIE的一个副本反之亦然二者的变化不会互相影响。其实就是$REQUEST是在初始化就生成的它不会因为受后者的影响而变化。PHP开发实用指南htttp:aiyooyoocomPHP实用指南某论坛提问一:查了资料为什么通过代理访问了还是得不到$SERVER'HTTPXFORWARDEDFOR'这个变量?请用上面的知识回答他。某论坛提问二:我做了个WAP网站按照网上的代码获取来访者手机号码可为什么测试时看不到我的真实IP地址也得不到我的手机号码?请用上面的知识回答他。提醒:尽管php里的变量不用定义就能使用但请你务必初始化变量。养成一个良好的习惯。在PHP里变量没有初始化会报Notice级别的错误。在开发时请在PHPini里设置errorreporting=EALL|ESTRICT。部署时则应该关闭页面报错记录错误日志。你可以在phpini里做如下设置:logerrors=On打开错误记录功能errorlog=E:debugphperrorslog将错误记录在这个文件里。常量概述常量就是一个值不会再改变的量由此我们可以推断常量是不可注销的(这个推理你是否理解了?)。有人问怎么在代码中类似unset一个变量那样注销一个常量就好比问怎么让truePI这类常量消失。你可以做到杀死所有的数学家毁灭了地球再自我毁灭这些东西就不在了。当然这只是个冷笑话你不应该这么做不能钻牛角尖。常量最常用的用法就是用在定义网站入口文件所在的根目录或者定义数据库连接参数以及防止外部引用等。Booldefine(string$name,mixed$value,bool$caseinsensitive=false)以上是define函数的原型注意下第三个参数的意思。在PHP以后可以使用const关键字在类定义的外部定义常量。要获取我们所有定义过的常量使用getdefinedconstants()函数。如果常量名是动态的可以用函数constant()来获取常量的值。这里提到了获取定义好的常量以后还会提到获取定义好的变量类方法等。这些有的要用到反射的知识。先透露一下获取所有已定义的变量使用getdefinedvars以此类推。另外注意一下魔术常量这个东西很多时候它们能方便我们的代码或者提高效率。你可以用他们来输出一些有意义的简单调试信息。谈到常量让我想起一个很流传的笔试题就是问errorreporting(^)的意思。用现在的流行的话来说就是这出题人真现在如果还有公司问这种题好二。经常看到有些人的数组键名不佳引号如$rowid,这样PHP会先把ID当做一个常量查找找不到后才当做键名来用。这样的话即浪费了效率还导致报错。可耻的是有些人居然关闭了报错自己错了都不知道。在程序里我们不提倡使用除和外的且无法一眼看出其意义的数字(这样的数字我们叫做“魔术数字“)所以我说errorreporting(^)这题很二犯了大忌。不过对一点看不懂得同学来说倒是很有警示意义。你还没入门呢计算机的入门课就是二进制运算。第五章、数组篇由于php提供了数组函数我们可以方便的完成很多工作。但是数组函数很多使用的时候php手册那种按字母排序的函数列表查阅并不方便。这里将数组的常用函数根据功能用途做简单的分类使用的时候就可以减少查询的范围至于具体的函数用法请查阅php手册。下面仅列出一些需要注意的函数。arraycountvalues统计数组中所有的值出现的次数PHP开发实用指南htttp:aiyooyoocomPHP实用指南arraysum计算数组中所有值的和(有了它再也不用傻傻的for循环相加了)arraykeyexists检查给定的键名或索引是否存在于数组中arraymultisort对多个数组或多维数组进行排序(多维数组排序再也不用冒泡或递归了)Php中的排序函数有很多请注意它们之间的区别。natcasesort用“自然排序”算法对数组进行不区分大小写字母的排序shuffle将数组打乱(这个函数很给力的说)arraychunk将一个数组分割成多个(给力)arrayfilter用回调函数过滤数组中的单元(若回调为空则可过滤数组中的空元素给力)arrayrand从数组中随机取出一个或多个单元这一系列里的很多函数这涉及到php里的“指针”而它的“指针”不总是那么可靠所以尤其需要小心。这些函数包括CurrenteachendkeyListNextPosPrevreset。。。arraycombine创建一个数组用一个数组的值作为其键名另一个数组的值作为其值arrayflip交换数组中的键和值(小技巧两次交换键和值可以给数组去重)arraymap将回调函数作用到给定数组的单元上arraymerge合并一个或多个数组arraypush将一个或多个单元压入数组的末尾(入栈)(如果用arraypush()来给数组增加一个单元还不如用$array=因为这样没有调用函数的额外负担)arrayreverse返回一个单元顺序相反的数组compact建立一个数组包括变量名和它们的值range建立一个包含指定范围单元的数组(参数可以是数字也可以是char)arrayreplace使用传递的数组替换第一个数组的元素arrayreduce用回调函数迭代地将数组简化为单一的值extract从数组中将变量导入到当前的符号表注意尽管php里的数组很强大但是数组是很耗内存的。由于php的数组在底层是用哈希表实现的所以效率和内存占用都不佳。所以不要使用很大的数组。一个语法的优化效率也许可以提高但是一个算法的优化效率可以提高!请注意算法的威力。数组操作中经历了多次hash处理。如果你需要性能更高的数组某些场合下也许可使用SPLFixedArray唠叨一句字符串本身也是一个隐式数组。另外对象也是数组。$data'first'='Hello'$data'first''second'='world'echo$data'first'运行此段代码并解释下原因。$a='array(,)'这样的一个变量表示的是一个字符串而不是真正的数组你如果需要让$a变成一个数组可以这么来:eval("$a="$a"")这种技巧在很多地方会用到。某些php版本这种写法可能无效可以写成eval("$a=$a")作为数组最常用的一个操作就是循环了这里我想简单的讲解下foreach循环。请看代码:$test=array(,,)foreach($testas$k=>$v)PHP开发实用指南htttp:aiyooyoocomPHP实用指南{$v=*$v数组里的每一个键值都乘以}printr($test)你认为会输出什么是,,吗?如果不是的话把foreach($testas$k=>$v)这一句改为foreach($testas$k=>$v)试试(注意:有可能你的脚本在两段不同的代码里输出没有区别这是你版本的原因不用奇怪)。是的这就是PHP里的引用。学过C的应该都知道C里经典的swap函数吧这里就不解释了。有兴趣有疑问的可以去看看C里面的这个函数去谷歌一下foreach的内核实现这篇文章。我这里只想提一点如果你没有足够把握的话不要滥用引用。很多比较老的开源代码里充斥着这样的滥用。当然我举得这个例子不算滥用用好引用可以提高不少代码效率这需要你好好看手册了。有C语言基础的理解起来就容易多了。引用就是php里的一个语法糖。语法糖指那些没有给计算机语言添加新功能而只是对人类来说更“甜蜜”的语法。语法糖往往给程序员提供了更实用的编码方式有益于更好的编码风格更易读。不过其并没有给语言添加什么新东西。Php里的引用SPL等都属于语法糖。还有语法盐语法海洛因等名词。那顺便再把for($i='A'$i<='Z'$i){echo$i}这段代码的输出写在纸上吧我先睡一觉去。可以理解为php中没有字符char只有字符串string。辟谣:有人说foreach循环损失的效率远大于for推荐用for这是谣言。前几天看到有人问类似的问题:<php$a="testa"$b=$aunset($a)echo$b>很多人认为$a和$b变量指向了同一个地址那么销毁$a,那么$b也就不存在了。结果证明他错了。很多人也一直对引用迷迷糊糊甚至一些多年经验的php程序员也讲不清。究其原因在于不熟悉C

职业精品

精彩专题

上传我的资料

热门资料

资料评价:

/ 147
所需积分:5 立即下载

意见
反馈

返回
顶部

Q