摘要:之前,第三方编译是管理器,是解释器之后,官方自带,与模式。又是解释器,又是管理器以模块模式运行常见配置数组排序
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
单引号:不能解析变量,只能解析单引号(")和反斜线()转义字符,比双引号效率高 双引号:解析变量(可使用{}括起来),能解析所有转义字符 heredoc:功能类似双引号(用于大字符串) newdoc: 功能类似单引号
//heredoc定义 $str = <<数据类型
浮点数:不能用于运算/比较运算,因为浮点数不是精确的
FALSE七种情况:0、0.0、"0"、""、NULL、false、array()
超全局数组(九种):$GLOBALS、$_GET、$_POST、$_SERVER、$_SESSION、$_COOKIE、$_FILES、$_ENV、$_REQUEST //$GLOBALS包含其他8种 //$_REQUEST包含$_GET、$_POST和$_COOKIE $_SERVER["REQUESR_URI"]与$_SERVER["PATH_INFO"]区别 http://localhost/aaa/index.php/foo/bar.html?p=222&q=333 $_SERVER["QUERY_STRING"] = "p=222&q=333"; $_SERVER["REQUEST_URI"] = "/aaa/index.php/foo/bar.html?p=222&q=333"; $_SERVER["SCRIPT_NAME"] = "/aaa/index.php"; $_SERVER["PHP_SELF"] = "/aaa/index.php"; $_SERVER["PATH_INFO"] = ‘/foo/bar.html’常量
2种定义方式:define()与constdefine()函数 const是语言结构 区别 define()不可以定义类常量预定义常量__FILE__、__LINE__运算符PHP错误运算符@
当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都将被忽略掉运算符的优先级
运算符优先级
递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > ^ > | > 逻辑与&& > 逻辑或|| > 三目 > 赋值 > and > xor > or0 && $b = 3 > 0){ echo "true"; }else{ echo "false"; } ?> // 相当于 if($a = ((3 > 0) && ($b = 3 > 0)))比较运算符
==与===区别等值判断(FALSE七种情况)逻辑运算符
短路作用: 逻辑与&& > 逻辑或|| > 三目 > 赋值 > and > xor > or递增/递减运算符
1、递增/递减不影响布尔值 2、递减NULL值没有效果 3、递增NULL值为1 4、递增/递减位置不同效果不同流程控制PHP遍历数组的三种方式及各自区别
1.for循环(while/do...while)
2.foreach循环
3.while、each()、list()组合区别: for循环:只能遍历索引数组 foreach循环:能遍历关联数组和索引数组 while、each()、list()组合:能遍历关联数组和索引数组 foreach循环遍历数组前,会对数组进行reset()操作 while、each()、list()组合则不会进行reset()操作PHP分支结构
if...elseif... 原则:可能性大的放在前面
switch...case... 与 if 区别: 判断参数的数据类型只能是整形、浮点、字符串switch...case...中,如果使用continue与break等价 如果switch...case...外层还有for,那么使用continue2才可以跳出循环 一般switch要比if性能高自定义函数及内部函数变量作用域
大部分变量只有一个多带带的范围,这个多带带范围跨度包含了include与requires的文件如果在非类中引入文件,该文件内部可以使用全局变量和函数 如果在类中引入文件,该文件内部可以使用函数、类的方法、类的属性函数/方法传参
传参分2种:
1、值传递
2、引用传递(函数修改该值,传递的参数必须是变量)//引用传递函数定义 $a = 1; function fn(&$a){ return ++$a; } echo fn($a); //2函数返回值
可以返回任意数据类型的值
省略return 默认返回NULL,如果要返回多个值请使用数组函数2种方式返回 1、普通返回 2、引用返回 function &fn(){ $a = 5; return $a; } $b = &fn();让函数内部修改外部变量的值,使用引用传参
让外部变量修改函数内部变量的值,使用引用返回引入外部文件
引入的代码将继承引入位置的作用域,即使用include或require位置可以使用的变量
include与require区别系统内置函数
时间日期函数date()、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()、正则表达式正则表达式作用(四种)
分割、查找、匹配、替换 作用对象:字符串、字符串、字符串(重要的事情记3遍)正则表达式的组成部分
分隔符:正斜线(/)、hash符(#)、取反符号(~) 通用原子:d(匹配数字)、D、w(匹配数字、字母、下划线)、W、s(匹配空格)、S 元字符: 量词 ?、+、*、{n}、{n,}、{n,m} 通配符 . 范围匹配 []、[-]、[^] 模式修正符:i、m、u、U向后引用
题目:把字符串 "abc" 替换为 "abc" 如何使用正则做到?$str = "abc"; $pattern = "/(.*)/"; preg_replace($pattern, "1", $str);贪婪模式
题目:把字符串 "abcdef" 替换为 "abcdef" 如何使用正则做到?$str = "abcdef"; $pattern = "/(.*?)/"; $pattern = "/(.*)/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()
用于打开一个文件,打开时需要指定一个打开模式
打开模式:r/r+、w/w+、x/x+、a/a+、b、t
r+ 追加写 w 覆盖写读取文件函数: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()目录遍历
//遍历 function loopDir($dir){ if(is_dir($dir)){ if($handle = opendir($dir)){ while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { echo $file." "; if(filetype($dir.DIRECTORY_SEPARATOR.$file === "dir")){ loopDir($dir.DIRECTORY_SEPARATOR.$file); } } } } }else{ echo basename($file)." "; } }会话控制会话控制的三种实现
1、使用URL带参数的方式(不安全,不推荐) 2、cookie 3、session如果禁用cookie后,该如何实现会话控制?
只能通过URL把SessionID传过去">下一页 简化: 下一页面向对象访问控制符
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/xml 5、GET请求参数是有长度限制的,url最多2048个字节,而POST没有限制四种数据编码
开发环境及PHP配置版本控制软件
PHP运行原理
主要了解 CGI、FastCGI、PHP-FPMCGI:是一种通讯协议(已经过时,性能低下) FastCGI:也是一种通讯协议,是CGI的升级版(现在推荐使用) PHP-FPM:是FastCGI进程管理器 php-cgi.exe:是PHP脚本解析器,不是FastCGI进程管理器PHP 有5种PHP运行模式:链接1、以CGI模式运行PHP LoadModule cgi_module modules/mod_cgi.so //要加载apache自带模块Options FollowSymLinks ExecCGI AddHandler cgi-script .php FcgidWrapper "D:/BtSoft/WebSoft/php/7.1/php-cgi.exe" .php //如果同时打开多个则会有很多php-cgi.exe,并且在执行完成之后消失:2、以FastCGI模式运行PHP FastCGI模式根据进程管理器的不同可以分为:Apache内置进程管理器,PHP-FPM进程管理器 Apache内置进程管理器: LoadModule fcgid_module modules/mod_fcgid.so //要加载apache模块,该模块要多带带下载FastCgiServer /home/weiyanyan/local/apache/cgi-bin/php-cgi -processes 20 AddType application/x-httpd-php .php AddHandler php-fastcgi .php Action php-fastcgi /cgi-bin/php-cgi PHP-FPM进程管理器: LoadModule fastcgi_module modules/mod_fcgid.soFastCgiExternalServer /home/weiyanyan/local/apache/cgi-bin/php-cgi -host 127.0.0.1:9000 AddType application/x-httpd-php .php AddHandler php-fastcgi .php Action php-fastcgi /cgi-bin/php-cgi php54是之前是一种关系,php54之后另一种关系。
php54之前,php-fpm(第三方编译)是管理器,php-cgi是解释器
php54之后,php-fpm(官方自带),master 与 pool 模式。php-fpm 和 php-cgi 没有关系了。php-fpm又是解释器,又是管理器3、以Apache模块模式运行PHP LoadModule php5_module "C:/php5/php5apache2_2.dll" AddType application/x-httpd-php .phpPHP常见配置
PHP 数组排序
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/25924.html
摘要:准备不充分第一轮不过第一家,广州琶洲一家环境超级好,福利也不错,主营美颜的公司,这也是我最感遗憾的一次面试机会。主要是第一轮面试第一个问题的种数据类型,只答了一个。 前言 首先需要说明的一点,本人只是一个毕业一年,只有一年工作经验的普通PHPer,能力有限,这篇文章只是将我这几周来的感受和体验分享出来,希望能给许多像我一样,或者互联网行业的新手带来一些收获,当然哪里说的不对或不足还是希...
摘要:最近面试了不少公司,正好把记得的问题做个总结。抽象类的接口的区别,不在于编程实现,而在于程序设计模式的不同。一般来讲,抽象用于不同的事物,而接口用于事物的行为。 最近面试了不少公司,正好把记得的问题做个总结。 本文 github 会持续更新 公众号 搜索 苏生不惑 或者扫二维码关注,每周更新。 showImg(https://segmentfault.com/img/bVbsYyM?w...
摘要:最近面试了不少公司,正好把记得的问题做个总结。抽象类的接口的区别,不在于编程实现,而在于程序设计模式的不同。一般来讲,抽象用于不同的事物,而接口用于事物的行为。 最近面试了不少公司,正好把记得的问题做个总结。 本文 github 会持续更新 公众号 搜索 苏生不惑 或者扫二维码关注,每周更新。 showImg(https://segmentfault.com/img/bVbsYyM?w...
阅读 2480·2021-09-22 16:05
阅读 2962·2021-09-10 11:24
阅读 3634·2019-08-30 12:47
阅读 2944·2019-08-29 15:42
阅读 3381·2019-08-29 15:32
阅读 1948·2019-08-26 11:48
阅读 1083·2019-08-23 14:40
阅读 903·2019-08-23 14:33