PHP引用变量什么是引用变量?如何定义引用变量?引用意味着访问具有不同名称的相同内容定义引用变量:引用变量如何工作&普通变量如何工作$a=range(0,10000);var_dump(memory_get_usage());//int(742072)$b=$a;var_dump(memory_get_usage());//int(742096)$a=range(0,30000);var_dump(memory_get_usage());//int(1532648)引用变量如何工作$a=range(0,10000);var_dump(memory_get_usage());//int(742072)$b=&$a;var_dump(memory_get_usage());//int(742096)$a=range(0,30000);var_dump(memory_get_usage());//int(1135312)注意:1.一旦定义了引用变量,这个变量就永远是引用变量,不能变回普通变量。2、引用变量可以修改引用的值,例如:$a='a';$c='c';$b=&$a;$b=&$c;//修改引用常量和数据类型字符串的定义以及单引号、双引号、heredoc、newdoc的区别单引号:不能解析变量,只能用单引号(\')和反斜杠(\\)转义parsed,比双引号效率更高双引号:可以解析变量(用{}括起来),所有转义符heredoc:作用类似于双引号(对于大字符串)newdoc:作用类似于单引号//heredoc定义$str=<<!>算术运算符>大小比较>(不)相等比较>参考>^>|>逻辑与&&>逻辑或||'真的';}else{echo'false';}?>//等价于if($a=((3>0)&&($b=3>0)))比较运算符==和===可区分等价判断(7例FALSE)逻辑运算符short-电路功能:逻辑与&&>逻辑或||>三元>分配>和>xor>or自增/自减运算符1.自增/自减不影响布尔值2.自减NULL值无作用3.自增NULL值为14不同的自增/自减位置作用不同,过程不同。PHP遍历数组的三种控制方式及各自区别1.for循环(while/do...while)2.foreach循环3.while,each(),list()组合区别:for循环:只能遍历索引数组foreachloop:可以遍历关联数组和索引数组while,each(),list()combination:可以遍历关联数组和索引数组。在foreach循环遍历数组之前,将对数组执行reset()。while,each(),list()组合不会reset()操作PHP分支结构if...elseif...原理:把最有可能的放在前面switch...case...和if区别:判断参数的数据类型只能是整数、浮点数、字符串开关。在..case...中,如果使用continue相当于break,如果switch...case...外层有for,则使用continue2跳出循环。一般来说,switch比if有更高的性能。自定义函数和内部函数变量作用域大多数变量只有一个作用域,这个作用域跨度包含包含和需要的文件。如果在非类中引入文件,则可以在文件内部使用全局变量和函数。如果在类中引入了文件,那么文件里面就可以使用函数、类方法、类属性函数/方法来传递参数。参数传递有两种:1.值传递2.引用传递(函数修改值,传递的参数必须是变量)//引用传递函数定义$a=1;functionfn(&$a){return++$a;}echofn($a);//2函数的返回值可以返回任何数据类型的值,默认返回NULL,如果要返回多个值,请使用数组函数两种方式返回1,正常返回2,和参考返回函数&fn(){$a=5;返回$a;}$b=&fn();让函数内部修改外部变量的值,使用引用传参允许外部变量修改函数内部变量的值,使用引用返回导入代码导入外部文件会继承作用域导入位置,即include或require位置可以使用的变量include和require不同于系统内置函数。e()、strtotime()、mktime()、time()、microtime()、date_default_timezone_set()IP处理函数ip2long()、long2ip()打印处理函数print()、printf()、print_r()、echo、sprintf()、var_dump()、var_export()序列化和反序列化函数serialize()、unserialize()字符串处理函数trim()、数组处理函数array_rande()、正则表达式)split,find,match,replaceobject:string,string,string(重要的事情记住3遍)正则表达式组件分隔符:正斜杠(/),井号(#),带回号(~)通用原子:\d(匹配数字),\D,\w(匹配数字、字母、下划线)、\W、\s(匹配空格)、\S元字符:量词?,+,*,{n},{n,},{n,m}通配符。范围匹配[]、[-]、[^]模式修饰符:i、m、u、U反向引用标题:putThestring'abc'isreplacedby'abc'如何使用正则表达式?$str='abc';$pattern='/(.*)<\/b>/';preg_replace($pattern,'\\1',$str);greedyPatterntopic:Replacethestring'abcdef'with'abcdef'如何使用正则表达式?$str='abcdef';$pattern='/(.*?)<\/b>/';$pattern='/(.*)<\/b>/U';preg_replace($pattern,'\\1',$str);注:默认为贪心模式正则表达式PHP函数preg_match(),preg_match_all(),preg_replace(),preg_split()中文匹配问题中文分为utf-8和gbk编码,它们的正则表达式与utf-8不同:0x4e00-0x9fa5模式修饰符需要使用u文件和目录处理打开文件函数:fopen()用于打开一个文件,打开时需要指定一种打开方式Openmode:r/r+,w/w+,x/x+,a/a+,b,tr+AppendwritewOverwritereadfilefunction:fread()/fgets()/fgetc()fgets()读取一行fgetc()读取字符写文件函数:fwrite()/fputs()关闭文件函数:fclose()可以在没有fopen()的情况下操作文件file_put_contents()file_get_contents()访问远程文件(不建议打开)启用allow_url_fopen(),http协议可以使用只读,ftp协议只能只读或只写目录操作函数目录名:basename()、dirname()、pathinfo()目录读取:opendir()、readdir()、closedir()、rewinddir()目录删除:rmdir()目录创建:mkdir()目录遍历//遍历函数loopDir($dir){if(is_dir($dir)){if($handle=opendir($dir)){whi乐(假!==($file=readdir($handle))){if($file!="."&&$file!=".."){echo$file.'\n';if(filetype($dir.DIRECTORY_SEPARATOR.$file==='dir')){loopDir($dir.DIRECTORY_SEPARATOR.$file);}}}}}else{echobasename($file).'\n';}}sessioncontrol会话控制三实现在1、使用带参数的URL(不安全,不推荐)2、Cookie3、session如果禁用cookie,如何实现session控制?SessionID只能通过URL传递">下一页简化:">nextpage面向对象的访问控制字符public,protected,private网络协议GET和POST的区别1.GET可以存储为浏览器书签,而POST不行2.GET可以保存在浏览器历史记录中,POST不行3.GET的安全性比POST差4.GET请求数据编码:application/x-www-form-urlencoded,而POST除了application/x-www-form-urlencoded编码也可以是multipart/form-data或者application/json或者text/xml5,GET请求参数有长度限制,url最大2048字节,POST不限制四种数据编码开发环境和PHP配置版本控制软件PHP运行原理主要了解CGI、FastCGI、PHP-FPMCGI:一种通信协议(过时,性能低)FastCGI:也是一种通信协议rotocol,CGI的升级版(现在推荐)PHP-FPM:FastCGI进程管理器php-cgi.exe:PHP脚本解析器,不是FastCGI进程管理器PHP有5种PHP运行模式:link1,以CGI模式运行PHPLoadModulecgi_modulemodules/mod_cgi.so//加载apache自己的模块OptionsFollowSymLinksExecCGIAddHandlercgi-script.phpFcgidWrapper"D:/BtSoft/WebSoft/php/7.1/php-cgi.exe".php//如果同时打开多个,会有很多php-cgi.exe,执行完成后消失:2.FastCGI模式下运行PHPFastCGI模式分为不同的进程管理器:Apache内置进程管理器、PHP-FPM进程管理器Apache内置进程管理器:LoadModulefcgid_modulemodules/mod_fcgid.so//加载apache模块,需要单独下载模块FastCgiServer/home/weiyanyan/local/apache/cgi-bin/php-cgi-processes20AddTypeapplication/x-httpd-php.phpAddHandlerphp-fastcgi.phpActionphp-fastcgi/cgi-bin/php-cgiPHP-FPM进程管理器:LoadModulefastcgi_modulemodules/mod_fcgid.soFastCgiExternalServer/home/weiyanyan/local/apache/cgi-bin/php-cgi-host127.0.0.1:9000AddTypeapplication/x-httpd-php.phpAddHandlerphp-fastcgi.phpActionphp-fastcgi/cgi-bin/php-cgiphp54是的php54之前,还有一个关系。在php54之前,php-fpm(第三方编译器)是manager,php-cgi是interpreter。php54之后,php-fpm(官方包含),master和pool模式。php-fpm不再与php-cgi有任何关系。php-fpm既是解释器又是管理器3.运行PHPLoadModulephp5_module"C:/php5/php5apache2_2.dll"AddTypeapplication/x-httpd-php.phpPHP常用配置Apache模块模式下的PHP数组排序