PHP手册

点击跳转

查找 php.ini 路径

1
php -i | grep php.ini
  • 操作符 两个相连的冒号: 范围解析操作符:: 执行操作符`
  • getenv 获取一个系统环境变量的值
  • php设置错误信息输出级别:
1
2
error_reporting(-1);  //报告所有 PHP 错误
ini_set('display_errors', 1);    //打开错误信息输出
  • array
1
2
3
in_array($value, $array);  //在$array中查找$value值,若存在则返回true
array_search($value, $array);  //在$array中查找$value值,若存在则返回对象key值
array_walk() // 二维数组新增一列
  • php 编码转换函数
1
2
$string = iconv("gb2312", "utf-8//IGNORE", $string);
$string = mb_convert_encoding($string, "UTF-8", "gb2312");
  • 格式化输出函数
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
printf(format,arg1,arg2,arg++) 输出格式化的字符串
sprintf(format,arg1,arg2,arg++):  把格式化的字符串写入变量中
fprintf(stream,format,arg1,arg2,arg++):  把格式化的字符串写入指定的输出流(例如:文件或数据库)

// format: 必需。规定字符串以及如何格式化其中的变量,可能的格式值:
%% - 返回一个百分号 %
%b - 二进制数
%c - ASCII 值对应的字符
%d - 包含正负号的十进制数(负数、0、正数)
%e - 使用小写的科学计数法(例如 1.2e+2
%E - 使用大写的科学计数法(例如 1.2E+2
%u - 不包含正负号的十进制数(大于等于 0
%f - 浮点数(本地设置)
%F - 浮点数(非本地设置)
%g - 较短的 %e  %f
%G - 较短的 %E  %f
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%X - 十六进制数(大写字母)
  • $_SERVER
1
2
3
4
$_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言
$_SERVER['REMOTE_ADDR'] //当前用户 IP 。
$_SERVER['REMOTE_HOST'] //当前用户主机名
$_SERVER['REQUEST_URI'] //注意是uri: URL
  • php变量定义特殊之处
1
2
3
4
5
6
7
<?php
$a = 'shi';
$$a = 'mian';  //相当于$($a),即$shi
$$$a = 'de';  //相当于$($($a)),即$mian
echo $a . ' ' . $$a . ' ' . $$$a;
?>
echo ‘shi mian de';
  • exec与shell_exec区别:

这两个函数都是执行Linux命令函数,不同的是获取返回结果不一样,exec只能获取最后一行数据,shell_exec则可以获取全部数据。

  • 编码知识

    Base64

    1. Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
    2. php 用base64_encode() 编码的数据要比原始数据多占用 33% 左右的空间。
    3. base64编码中的符号"="、"+"、"/“不适合在URL里传输,所以要替换为 ‘,’, ‘_’, ‘(',这样就免去了在URL编解码和数据库存储时所要作的转换。
  • 浮点数比较

    需要用到高精度的比较函数,不然会比较失败(使用bccomp,比较浮点数时bccomp第三个参数必须加上,不加第三个参数则是比较整数位)

  • php字符串块和代码块处理方式:

    1. Heredoc结构:第三种表达字符串的方法是用 heredoc 句法结构:«<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。
    2. Nowdoc结构:就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。
  • pear和pecl的区别和联系

    Pear:是PHP的扩展代码包,所有的扩展均以PHP代码的形式出现,功能强大,安装简单,甚至可以改改就用。使用的时候,要在代码中进行Include才能够使用。

    Pecl:是PHP的标准扩展,可以补充实际开发中所需的功能,所有的扩展都需要安装,在Windows下面以Dll的形式出现,在linux下面,需要单独进行编译,它的表现形式为根据PHP官方的标准用C语言写成,尽管源码开放但是一般人无法随意更改源码。

    最直接的表述:Pear是PHP的上层扩展,Pecl是PHP的底层扩展。

  • 闭包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
// php的闭包(Closure)也就是匿名函数。是PHP5.3引入的。

// 闭包的语法很简单,需要注意的关键字就只有use,use意思是连接闭包和外界变量。

// 计算数组$arr所有参数的合计数
$arr = [1, 2, 3];
$total = 1;
$callback = function ($num) use (&$total) {
    $total += $num;
};  //注意使用引用传值,使用引用和不使用引用就代表了是调用时赋值,还是申明时候赋值
array_walk($arr, $callback);
echo $total;
  • php内存管理-垃圾回收机制|深拷贝与浅拷贝、写时拷贝

    PHP自带垃圾回收机制,PHP进行内存管理的核心算法一共两项:一是引用计数,二是写时拷贝。

    参考文章

    深拷贝:赋值时值完全复制,完全的copy,对其中一个作出改变,不会影响另一个

    浅拷贝:赋值时,引用赋值,相当于取了一个别名。对其中一个修改,会影响另一个

    PHP中, = 赋值时,普通对象是深拷贝,但对对象来说,是浅拷贝。也就是说,对象的赋值是引用赋值。(对象作为参数传递时,也是引用传递,无论函数定义时参数前面是否有&符号)

    写时拷贝

    参考文章

    定义:当你把$a赋值给$b的时候,$a的值并没有真的复制了一份,这样是对内存的极度不尊重,也是对时间复杂度的极度不尊重,计算机仅仅是将$b指向了$a的值而已,这就叫多快好省。那么,什么时候真正的发生复制呢?就是当我们修改$a的值为123的时候,这个时候就不得已进行复制,避免$b的值和$a的一样。

    GC处理完整流程图