(小白)PHP基础学习003 20201003
历程
- 静态变量
static,是在函数内部定义的变量,使用static关键字修饰,用来实现跨路径函数共享数据的变量;
static $变量名=值 //通常会在定义的时候就直接赋值
静态变量都是局部变量
为了跨函数共享数据,不是不同函数,而是同一个函数被多次调用,在多次调用时,不会重复定义,而只是会被第一次初始化;
<?php
function a(){
$a=1;static $b=1;echo $a++,"\r\n",$b++,"\r\n";
}
a();
echo "------\r";
a();
echo "------\r";
a();
?>
结果:
1
1
------
1
2
------
1
3
发现static定义的变量,每一次都根据上一次的进行了改变
在函数结束后不会被释放
1、为了统计
2、为了统筹函数多次调用得到的不同结果(递归思想)
- 可变函数
当前有一个变量所保存的值,刚好是一个函数的名字,那么可以使用变量+()来充当函数名使用
<?php
function display2(){
echo __FUNCTION__;
}
$func="display";
$func();
?>
结果:
display2
可变函数在系统使用的过程中还是比较多的,尤其是使用多系统函数的时候,需要用户在外部定义一个自定义函数,但是需要传入到系统函数内部使用。
- 匿名函数
<?php
$a=function(){
//匿名函数echo "hello world!","\r\n";
};
$a();
var_dump($a);?>
结果:
hello world!
object(Closure)#1 (0) {
}
Closure就是闭包
- 闭包
函数内部有一些局部变量(要执行的代码码)在函数执行之后没有被释放
<?php
function display(){
$name=__FUNCTION__;$innerfunction=function() use($name){
//use就是将外部变量(局部)保留给内部使用(闭包)echo $name;};//函数调用$innerfunction();
}display();?>
结果:
display
-
伪类型
实际上在PHP中不存在的类型,但是通过伪类型可以帮助程序员更好的查看操作手册而更方便学习
Mixed:多类型,只要是PHP中的类型即可
Number: -
常用的系统函数:
有关数据的函数:
rand():得到一个随机数,指定区间的随机整数
<?php
echo rand(1,10),"\r";
echo mt_rand(1,10),"\r"; //效率比rand高,一般用随机会用mt_rand
?>
pow()求指定数字的指定次数结果:
<?php
echo pow(2,10),"\r";
echo 2^10,"\r"; //这里就不是2的10次方了
echo 2**10,"\r";
?>
1024
8
1024
- 有关函数的函数:
function_exists():判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)
func_get_arg():在自定义函数中去获取指定数值对应的参数
func_get_args():在自定义函数中获取所有的参数(数组)
func_num_args():在自定义函数中获取参数的数量
以上都是统计的实参的数量
<?php
function test($a,$b){
var_dump(func_get_arg(1));var_dump(func_get_args());var_dump(func_num_args());
};
test(1,2);
?>
int(2)
array(2) {
[0]=>int(1)[1]=>int(2)
}
int(2)
- 错误处理:
语法错误:Parseerror
运行时错误:runtime error
逻辑错误:
错误代号:
所有看到的代码在PHP中都被定义为了系统常量(可以直接使用)
系统错误:
E_PARSE:编译错误,代码不会执行
E_ERROR:fetal error,致使错误,会导致代码不能正确继续执行(出错的位置断掉)
E_WARING:警告错误,不会影响代码执行,但是可能得到意想不到的结果
E_NOTICE:notice,通知错误,不会影响
用户错误:
E_USER_ERROR:
E_USER_WARNING:
E_USER_NOTICE:
用户在使用自定义错误触发的时候,会使用的错误代号(系统不会用到)
其它:
E_ALL
代表着所有错误,建议在开发过程中(开发环境)使用
<?php
$a=100;
$b=0;
if($b==0){
trigger_error("除数不能为0"); //默认notice,会继续执行echo("\r");trigger_error("除数不能为0",E_USER_ERROR); //默认error,不会继续执行
}
echo "hello";
?>
Notice: 除数不能为0 in /usercode/file.php on line 5Fatal error: 除数不能为0 in /usercode/file.php on line 7
可以通过trigger_error的第二个参数进行严格限制
- 错误显示设置:
方法一:
PHP.ini PHP的配置文件:全局配置
Display_errors:是否显示错误
Error_reporting:显示什么级别的错误
方法二:
可以在运行PHP的脚本中设置,在脚本中显示定义的配置项级别比配置文件高(通常会用脚本配置)
Error_reporting():设置对应的错误显示级别
ini_set(“配置文件中的配置项,配置值”)
ini_set(“error_reporting”,E_ALL);
ini_set(“Display_errors”,1);
-
错误日志设置
不直接让错误赤裸裸的展示给用户
不友好
不安全,错误会暴露网站更多信息(路径,文件名)
这样需要保存到日志文件中 .log文件 -
自定义错误处理函数
<?php
function my_error($errno,$errstr,$errfile,$errline){
if(!(error_reporting() & $errno)){
return false;}switch ($errno) {
case E_ERROR:// code...case E_USER_ERROR:echo "fetal error in file ".$errfile."on line ".$errline."<br/>";echo "error info :".$errstr;break;case E_WARNING:case E_USER_WARNING:echo "Warning in file ".$errfile." on line ".$errline."<br/>";echo "error info :".$errstr;break;case E_NOTICE:case E_USER_NOTICE:echo "Notice in file ".$errfile." on line ".$errline."<br/>";echo "error info :".$errstr;break;};};
一般情况下:
echo 100/0;
报错:
Warning: Division by zero in /usercode/file.php on line 28
INF
自定义后:
set_error_handler('my_error');
echo 100/0;
Warning in file /usercode/file.php on line 27<br/>error info :Division by zeroINF
- 字符串
单引号‘’和双引号“”,一般用于比较短或者没有结构要求的字符串,如果有结构要求,或者内容超过一行,可以使用以下两种结构定义:
nowdoc:没有单引号的单引号字符串
heredoc:没有双引号的双引号字符串
$str=<<<‘边界符’
字符串内容
边界符
<?php//heredoc:没有双引号的双引号字符串
$str=<<<EODhello EOD;//nowdoc:没有单引号的单引号字符串$str2=<<<'EOD'hello EOD;var_dump($str,$str2);?>
string(9) " hello"
string(9) " hello"
-
字符串转义
在计算机通用协议中,有一些特定方式定义的字母,系统会特定处理,通常这种方式都是使用反斜杠+字母(单词)的特性:
\r\n换行
\r代表回车(理论上是回到当前行的首位置)
\n代表新的一行
\t类似tab键,输出4个空格键
$在PHP中使用$作为变量符号,因此需要特定识别 -
换行只以在双引号下有效"\r\n"