php学习随手记的笔记

isset()

检测变量是否已经设置过了:

1
isset($a)

gettype()

获取变量类型:

1
gettype($a)

is_int(), is_float()

判断变量是否是某种类型

1
2
3
4
5
6
7
8
is_float($a)[is_double($a)]
is_int($a)[is_integer($a)]
is_string($a)
is_object($a) 是否为对象
is_array($a)
is_resource($a) 是否为资源类型
is_bool($a)
is_null($a) 是否为null

调试打印变量

  • echo 字符串,数字
  • print_r 打印层次化数据,如数组、对象
  • var_dump 打印变量的类型及其值

不要用echoprint_r打印布尔值,用var_dump打印布尔值和null
echo打印数组、falsenull都是空行,打印true1

字符串转换为数字

从左至右截取,直到遇到不合法字符,取到的部分转换为数字

数字/字符串/数组转换为数组

假:

1
2
3
4
5
6
7
''
'0'
0
0.0
false
NULL
array()

其余全为真

empty(var) 检查变量是否为空

  • var为空,返回TRUE, 为空:'', 0, 0.0, '0', NULL, FALSE, array(), 没有任何属性的对象
  • var非空非零,返回FALSE

赋值:传值赋值,引用赋值

传值赋值

1
2
$a = 1;
$b = $a;

引用赋值

1
2
$a = 1;
$b = &$a;

unset() 销毁变量

1
2
$a = 1;
unset($a);

引用赋值时,一个变量被销毁,另一个不会被销毁。

动态变量名

1
2
3
4
5
6
$a = 'b';
$b = 'c';
echo $$a;
$c = 'd';
echo $$$a

动态函数名

1
2
3
4
5
6
7
function b(){
echo 'b';
}
$a = 'b';
$a();

+ 加法运算

int有上限,数太大了,会自动转换为浮点型。

% 取模

结果正负仅取决于被除数。

一段有趣的代码

  • strpos() 区分大小写,返回首次出现的位置或没找到false
  • ==:只验证值
  • ===:值和类型都要相等

code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$str = 'abc';
$pos = strpos($str, 'a');
if($pos == false){
echo "not found\n";
}else{
echo "found\n";
}
if($pos === false){
echo "not found\n";
}else{
echo "found\n";
}

output:

1
2
not found
found

reason:

==时, 0会被自动转换为false

. 字符串拼接

switch case

case判断条件成立时,后面不会继续判断,所以每块代码结束后,要加break;

函数

  • 函数不区分大小写,但仍建议声明时和调用时大小写保持一致
  • 函数参数如果有默认参数,应写在最后。

在函数内操作全局变量

  1. &
  2. global $a;
  3. $GLOBALS['var_name'] $GLOBALS是系统给的九个超级全局变量之一。

时间戳函数

Unix纪元:格林威治时间1970年1月1日00:00:00

time() 返回自从Unix纪元到当前的秒数

eg:

1
2
3
4
5
<?php
$next_week = time() + (7 * 24 * 60 * 60);
echo 'now:'.date('Y-m-d').”\n”;
echo 'next week:'.date('Y-m-d').”\n”;
?>

microtime() 返回自从Unix时间戳和微秒数。

函数原型mixed microtime([bool $get_as_float])mixed表示返回类型不止一种。

用于计算脚本的运行时间:在脚本执行处和结尾处都获取一个时间戳,两者相减。

eg:

1
2
3
4
$start = time(true);
….
$end = time(true);
echo $end - $start;

date() 时间戳格式化

格式化后时间与当前时间有时差

  1. 找到php.ini
  2. 将时区更改为date.timezone = PRC

eg:

1
2
3
4
5
$lastday = time() - 24 * 3600;
echo date('Y年m月d日 H:i:s', $lastday), '<br>';
// 不写第二个参数,则默认为time(),当前时间戳
echo date('Y-m-d H:i:s').'<br>';

日期解析函数 给定具体日期时间,转换为时间戳

  • mktime() 取得一个日期的Unix时间戳。egecho mktime(18, 30, 16, 8, 22, 1992);.
  • strtotime() 将任何英文文本的日期时间描述解析为Unix时间戳
  • checkdate() 验证日期是否合法。egvar_dump(checkdate(2, 30, 2001));.

strtotime() eg:

1
2
3
echo strtotime('now');
echo strtotime('-1 day');
echo strtotime('+1 week');

定义大段字符串 heredoc nowdoc

heredoc 双引号””

要求严格:开头前后不能有空格,中间不能插注释,前后保持一致,大小写均可

1
2
3
4
5
6
7
$str = <<<here
something1
something2
something3
here;
echo $str;

nowdoc 单引号’’

1
2
3
4
5
6
7
$str = <<<'NOW'
somethint1
something2
something3
NOW;
echo $str;

单双引号

  1. 双引号转义较多,单引号只能转义两个\'
  2. 双引号可以解析变量的值,单引号不解析。
  3. 速度,单引号没有过多的转义和变量解析,速度上比双引号快。字符串、数组的键$arr['name']优先使用单引号。

字符串函数

字符串长度

  • int strlen($str) 计算字符串长度,$str为中文字符时,计算字节数。
  • int mb_strlen(sting $str [, string $encoding]) 计算字符串长度,尤其是字符串中包含中文字符的情况,计算的是中文字符数,非字节数。胞嘧啶,返回3。(

Eg GB2312一个汉字2字节,UTF-8一个汉字3字节)。

  • mb宽字节,国际编码支持,英文、法文、中文等都支持。
  • mb_strlen()不是PHP核心函数,需要确保php.iniextension=php_mbstring.dll一行没有被注释掉。

字符串位置

  • strpos($str, search, [int]) search在$str中从int处开始第一次出现的位置
  • stripos($str, search, [int]) search在$str中从int处开始第一次出现的位置,不区分大小写
  • strrpos($str, search, [int]) search在$str中从int处开始最后一次出现的位置

可能返回布尔值FALSE,也可能返回等同于FALSE的非布尔值,因为字符串位置从0开始,而不是1

字符串替换

1
2
3
4
str_replace() 子串替换
str_ireplace()
strtr() 批量替换字符串,第二个参数为数组,键为待替换,值为替换后。
substr_replace()

子串

1
2
3
4
substr()
strstr()
stristr()
strrchr()

分割、连接、反转

1
2
3
str_split()
explode()
implode()

空白处理

1
2
3
4
5
string trim()
string ltrim()
string rtrim()
chunk_split()
str_pad

字符串转义函数

1
2
3
4
5
6
7
addslashes(string $str)
stripslashes(string $str)
get_magic_quotes_gpc()
htmlspecialchars()
htmlspecialchars_decode()
html_entity_decode()
htmlentities()

字符串比较函数

int strcmp($str1, $str2)

strcasecmp() 不区分大小写

BOM头

有些utf-8文档前面会加上三个人眼无法看到的字节。

窝很可爱,请给窝钱