查看: 190|回复: 0

[PHP代码] PHP面试之一:PHP基础知识点

发表于 5 天前
尚学堂AD
PHP引用变量 什么是引用变量?如何定义引用变量?

引用意味着用不同的名字访问同一个内容
定义引用变量:使用&

引用变量的工作原理

普通变量的工作原理

  1. $a = range(0,10000);
  2. var_dump(memory_get_usage()); //int(742072)
  3. $b = $a;
  4. var_dump(memory_get_usage()); //int(742096)
  5. $a = range(0,30000);
  6. var_dump(memory_get_usage()); //int(1532648)
复制代码

引用变量的工作原理

  1. $a = range(0,10000);
  2. var_dump(memory_get_usage()); //int(742072)
  3. $b = &$a;
  4. var_dump(memory_get_usage()); //int(742096)
  5. $a = range(0,30000);
  6. var_dump(memory_get_usage()); //int(1135312)
复制代码

  1. 注意:
  2. 1、引用变量一旦定义,此变量永远是引用变量,不可能再变回普通变量
  3. 2、引用变量可以修改引用的值,例如:
  4. $a = 'a';
  5. $c = 'c';
  6. $b = &$a;
  7. $b = &$c; //修改引用
复制代码
常量及数据类型 字符串的定义方式及各自区别

单引号、双引号、heredoc、newdoc

  1. 单引号:不能解析变量,只能解析单引号(\')和反斜线(\\)转义字符,比双引号效率高
  2. 双引号:解析变量(可使用{}括起来),能解析所有转义字符
  3. heredoc:功能类似双引号(用于大字符串)
  4. newdoc: 功能类似单引号
复制代码
  1. //heredoc定义
  2. $str = <<<EOT
  3. xxxxxxxxxxxx
  4. EOT;
  5. //newdoc定义
  6. $str = <<<'EOT'
  7. xxxxxxxxxxxxxxxx
  8. EOT;
复制代码
数据类型

浮点数:不能用于运算/比较运算,因为浮点数不是精确的
FALSE七种情况:0、0.0、'0'、''、NULL、false、array()
超全局数组(九种):

  1. $GLOBALS、$_GET、$_POST、$_SERVER、$_SESSION、$_COOKIE、$_FILES、$_ENV、$_REQUEST
  2. //$GLOBALS包含其他8种
  3. //$_REQUEST包含$_GET、$_POST和$_COOKIE
  4. $_SERVER['REQUESR_URI']与$_SERVER['PATH_INFO']区别
  5. http://localhost/aaa/index.php/foo/bar.html?p=222&q=333
  6. $_SERVER['QUERY_STRING'] = "p=222&q=333";
  7. $_SERVER['REQUEST_URI'] = "/aaa/index.php/foo/bar.html?p=222&q=333";
  8. $_SERVER['SCRIPT_NAME'] = "/aaa/index.php";
  9. $_SERVER['PHP_SELF'] = "/aaa/index.php";
  10. $_SERVER['PATH_INFO'] = ‘/foo/bar.html’
复制代码
常量

2种定义方式:define()与const

  1. define()函数
  2. const是语言结构
  3. 区别
  4. define()不可以定义类常量
复制代码

预定义常量

  1. __FILE__、__LINE__
复制代码
运算符 PHP错误运算符@

当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都将被忽略掉

运算符的优先级
运算符优先级

递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > ^ > | > 逻辑与&& > 逻辑或|| > 三目 > 赋值 > and > xor > or

  1. <?php
  2. if($a = 3 > 0 && $b = 3 > 0){
  3. echo 'true';
  4. }else{
  5. echo 'false';
  6. }
  7. ?>
  8. // 相当于
  9. if($a = ((3 > 0) && ($b = 3 > 0)))
复制代码
比较运算符

==与===区别

  1. 等值判断(FALSE七种情况)
复制代码
逻辑运算符

短路作用: 逻辑与&& > 逻辑或|| > 三目 > 赋值 > and > xor > or

递增/递减运算符
  1. 1、递增/递减不影响布尔值
  2. 2、递减NULL值没有效果
  3. 3、递增NULL值为1
  4. 4、递增/递减位置不同效果不同
复制代码
流程控制 PHP遍历数组的三种方式及各自区别

1.for循环(while/do...while)
2.foreach循环
3.while、each()、list()组合

  1. 区别:
  2. for循环:只能遍历索引数组
  3. foreach循环:能遍历关联数组和索引数组
  4. while、each()、list()组合:能遍历关联数组和索引数组
  5. foreach循环遍历数组前,会对数组进行reset()操作
  6. while、each()、list()组合则不会进行reset()操作
复制代码
PHP分支结构

if...elseif... 原则:可能性大的放在前面
switch...case... 与 if 区别: 判断参数的数据类型只能是整形、浮点、字符串

  1. switch...case...中,如果使用continue与break等价
  2. 如果switch...case...外层还有for,那么使用continue2才可以跳出循环
  3. 一般switch要比if性能高
复制代码
自定义函数及内部函数 变量作用域

大部分变量只有一个单独的范围,这个单独范围跨度包含了include与requires的文件

  1. 如果在非类中引入文件,该文件内部可以使用全局变量和函数
  2. 如果在类中引入文件,该文件内部可以使用函数、类的方法、类的属性
复制代码
函数/方法传参

传参分2种:
1、值传递
2、引用传递(函数修改该值,传递的参数必须是变量

  1. //引用传递函数定义
  2. $a = 1;
  3. function fn(&$a){
  4. return ++$a;
  5. }
  6. echo fn($a); //2
复制代码
函数返回值

可以返回任意数据类型的值
省略return 默认返回NULL,如果要返回多个值请使用数组

  1. 函数2种方式返回
  2. 1、普通返回
  3. 2、引用返回
  4. function &fn(){
  5. $a = 5;
  6. return $a;
  7. }
  8. $b = &fn();
复制代码

让函数内部修改外部变量的值,使用引用传参
让外部变量修改函数内部变量的值,使用引用返回

引入外部文件

引入的代码将继承引入位置的作用域,即使用include或require位置可以使用的变量

include与require区别

系统内置函数

时间日期函数

  1. date()、strtotime()、mktime()、time()、microtime()、date_default_timezone_set()
复制代码

IP处理函数

  1. ip2long()、long2ip()
复制代码

打印处理函数

  1. print()、printf()、print_r()、echo、sprintf()、var_dump()、var_export()
复制代码

序列化及反序列化函数

  1. serialize()、unserialize()
复制代码

字符串处理函数

  1. trim()、
复制代码

数组处理函数

  1. array_rande()、
复制代码
正则表达式 文件及目录处理 打开文件函数: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()

目录遍历
  1. //遍历
  2. function loopDir($dir){
  3. if(is_dir($dir)){
  4. if($handle = opendir($dir)){
  5. while (false !== ($file = readdir($handle))) {
  6. if ($file != "." && $file != "..") {
  7. echo $file.'\n';
  8. if(filetype($dir.DIRECTORY_SEPARATOR.$file === 'dir')){
  9. loopDir($dir.DIRECTORY_SEPARATOR.$file);
  10. }
  11. }
  12. }
  13. }
  14. }else{
  15. echo basename($file).'\n';
  16. }
  17. }
复制代码
会话控制 会话控制的三种实现
  1. 1、使用URL带参数的方式(不安全,不推荐)
  2. 2、cookie
  3. 3、session
复制代码
如果禁用cookie后,该如何实现会话控制?

只能通过URL把SessionID传过去

  1. <a href="next.php?<?php echo session_name().'='.session_id(); ?>">下一页</a>
  2. 简化:
  3. <a href="next.php?<?php echo SID; ?>">下一页</a>
复制代码
面向对象 访问控制符

public、protected、private

网络协议 GET与POST区别
  1. 1、GET可以收藏成浏览器书签,而POST不行
  2. 2、GET可以保存在浏览器历史记录里,而POST不行
  3. 3、GET安全性相比POST差
  4. 4、GET请求数据编码:application/x-www-form-urlencoded,而POST则除了application/x-www-form-urlencoded编码,还可以是multipart/form-data或者application/json或者text/xml
  5. 5、GET请求参数是有长度限制的,url最多2048个字节,而POST没有限制
复制代码

四种数据编码

开发环境及PHP配置 版本控制软件

PHP运行原理

主要了解 CGI、FastCGI、PHP-FPM

  1. CGI:是一种通讯协议(已经过时,性能低下)
  2. FastCGI:也是一种通讯协议,是CGI的升级版(现在推荐使用)
  3. PHP-FPM:是FastCGI进程管理器
  4. php-cgi.exe:是PHP脚本解析器,不是FastCGI进程管理器
复制代码

PHP 有5种PHP运行模式:链接

  1. 1、以CGI模式运行PHP
  2. LoadModule cgi_module modules/mod_cgi.so //要加载apache自带模块
  3. <Files ~ "\.php$">
  4. Options FollowSymLinks ExecCGI
  5. AddHandler cgi-script .php
  6. FcgidWrapper "D:/BtSoft/WebSoft/php/7.1/php-cgi.exe" .php
  7. </Files>
  8. //如果同时打开多个则会有很多php-cgi.exe,并且在执行完成之后消失:
复制代码

  1. 2、以FastCGI模式运行PHP
  2. FastCGI模式根据进程管理器的不同可以分为:Apache内置进程管理器,PHP-FPM进程管理器
  3. Apache内置进程管理器:
  4. LoadModule fcgid_module modules/mod_fcgid.so //要加载apache模块,该模块要单独下载
  5. <IfModule fastcgi_module>
  6. FastCgiServer /home/weiyanyan/local/apache/cgi-bin/php-cgi -processes 20
  7. AddType application/x-httpd-php .php
  8. AddHandler php-fastcgi .php
  9. Action php-fastcgi /cgi-bin/php-cgi
  10. </IfModule>
  11. PHP-FPM进程管理器:
  12. LoadModule fastcgi_module modules/mod_fcgid.so
  13. <IfModule fastcgi_module>
  14. FastCgiExternalServer /home/weiyanyan/local/apache/cgi-bin/php-cgi -host 127.0.0.1:9000
  15. AddType application/x-httpd-php .php
  16. AddHandler php-fastcgi .php
  17. Action php-fastcgi /cgi-bin/php-cgi
  18. </IfModule>
复制代码

php54是之前是一种关系,php54之后另一种关系。
php54之前,php-fpm(第三方编译)是管理器,php-cgi是解释器
php54之后,php-fpm(官方自带),master 与 pool 模式。php-fpm 和 php-cgi 没有关系了。php-fpm又是解释器,又是管理器

  1. 3、以Apache模块模式运行PHP
  2. LoadModule php5_module "C:/php5/php5apache2_2.dll"
  3. AddType application/x-httpd-php .php
复制代码
PHP常见配置


回复

使用道具 举报