php作用域
- 不支持块作用域
- 支持函数作用域
- php不可以直接访问函数外部的变量,以下5种方法可以访问外部变量
3.1 global:关键字声明,在函数内部声明某一个变量来自外部
3.2 $GLOBALS[‘outer’]:所有声明的全局变量,均被添加到$GLOBALS[]这个变量数组中,在函数内部直接以数组的方式进行调用,[‘变量名’],去掉’$’符号;
3.3 匿名函数/闭包:$变量 = funtion() use ($outer),通过use()介绍外部变量到函数内部中,媒介的作用
3.4 箭头函数:$变量=fn()=>(…外部变量的操作….),可直接调用外部的变量,php箭头函数功能不是很强大,一般很少用
3.5 纯函数:$变量 = funtion($outer) {..$outer操作…}传参的方式引入外部变量 - 函数外部需要访问函数内部声明的私有变量
4.1 return[函数返回值,私有变量],通过list(变量1,变量2),通过解构的方式去访问参数变量; - 函数内部的变量与外部变量同名,内部变量赋值会覆盖外部变量的值,函数内部优先级较高
常量
- 常量的声明不需要’$’,并确定全部大写,蛇形命名;
- 两大特征:有确定的值,且不能修改
- 自定义常量
3.1 define():格式(‘常量名’,’常量的值’),可用在if中,不能用在类中
3.2 const: 编译阶段处理,速度更快,必须在作用域顶部声明,可用在类中,不能用在if中
3.3 常量不受作用域限制,全局有效
3.4 空字符可以当常量名,只可以用define()声明,只能用constant(‘’)输出变量值
3.5 constant():显示一个常量,const声明的常量,不能用constant()函数来打印 - 预定义常量
4.1 为系统自定义的常量,存在确定的值,用户可以直接用
4.2 php版本的常量:PHPVERSION
4.3 操作系统:PHPOS
4.4 预定义常量-魔术常量,系统自动更新维护
4.5 当前行号:LINE
4.6 当前文件名:FILE
4.7 当前文件所在目录:__DIR
字符串
字符串两种声明方式
- 单引号:纯文本,不解析变量,不转义特殊符号的转义序列,多行大段,不含变量和转义符的静态文本
1.1 nowdoc语法格式:$变量名 = <<< ‘标识符’ ….纯文本… 标识符 - 双引号:模板字符串,解析变量,转义特殊符号,插值变量和特殊字符的动态模板
2.1 heredoc语法格式:$变量名 = <<< “标识符” ….文本..模板..特殊字符.. 标识符 - 标识符,行业规定全部大写,可任意命名,只要成对出现即可
- heredoc:双引号可省略,推荐不写
字符串常用函数
- string与array之间的转换
1.1 array->string:implode(‘连接符’,$arry),join():别名函数,一般只用implode
1.2 string->array:explode(‘分隔符’,字符串变量名) - 查询与替换
2.1 获取字串:substr():子字符串,格式:($str,start,sum(数量)),sum不写,默认取到最右边
2.2 strstr():首次出现位置符后面的所有字符,格式($str,’某个字符’,true),去除某个字符以及之后的字符,true比表示之前的字符(不包括当前的字符);
2.3 strpos():字符首次出现的索引,格式:($str,’某个字符’,查询起点),查询起点不写默认从第一个开始查询
2.4 str_replace():替换字符,格式:(‘目标字符’,’最终字符’,变量名),应用场景:敏感词的替换-可用数组一一对应字符串替换,目录分隔符的替换,
2.5 strlen():获取字符串的长度
2.6 trim():去掉首尾字符,格式:(变量名,’目标字符’),目标字符不填写,则默认去掉空格
2.7 rtrim():去掉右边尾部字符,格式:(变量名,’目标字符’)
2.8 ltrim():去掉左边头部字符,格式:(变量名,’目标字符’)
2.9 strip_tags():自动过滤去掉html标签,php标签,js标签,其中html,js保留文本,php-全部过滤包括文本<!-- url相关 -->
2.10 parse_str():将查询字符串转为数组,格式:(查询字符串,$变量名)
2.11 parse_url():将url地址字符串转为数组,:格式:$变量 = parse_url(‘url地址’);
2.12 parse_str()与parse_url()定义数组名的方式不一致,注意
2.13 http_build_query():将数组转为查询字符串,格式:(数组)
其他
- 系统目录分隔符常量:DIRECTORY_SEPARATOR,配合str_replace使用可以适应不同的目录分隔符
- $_SERVER:当前服务器中的常量,QUERY_STRING—get请求向服务器发送查询参数
实例源码
<?php
$sum = '方法1';
// global方式获取外部变量
function text():string{
global $sum;
return 'global' . $sum;
};
echo text().'<hr>';
$sum2 = '方法2';
function text2():string{
return '超全局变量方法'. $GLOBALS['sum2'];
};
echo text2().'<hr>';
$sum3 = '方法3';
$text3 = function()use($sum3) {
return '闭包函数用use介绍变量'.$sum3;
};
echo $text3().'<hr>'; //不管什么函数调用都是要'()'的
$sum4 = '方法4';
$text4 = fn() =>'箭头函数可以直接使用外部变量'.$sum4;
echo $text4().'<hr>';
$sum5 = '方法5';
$text5 = function($x) {
return '纯函数传参使用外部变量'.$x;
};
echo $text5($sum5).'<hr>'; // 纯函数传参即可
function getConfig(){
$a = 10;
$b = 10;
$c = 10;
$d = $a * $b + $c;
return [$d,$a];
};
echo print_r(getConfig()) .'<hr>';
echo getConfig()[1].'<hr>';
echo getConfig()[0].'<hr>';
list($first,$second) = getConfig(); // 解构函数的返回的数组;
echo $first.'<hr>';
echo $second.'<hr>';
$strtext = ' www.baidu.com ';
echo $strtext.'<hr>';
$strtext = trim($strtext);
echo $strtext;
echo substr($strtext,2,4).'<hr>'; //获取字串
echo strstr($strtext,'b').'<hr>'; //获取第一次出现的字符的前半段或者后半段,true区分前后,用于获取文件名或者扩展名;
echo strpos($strtext,'b').'<hr>'; // 获取某个字符首次的索引
echo str_replace('baidu','qq',$strtext).'<hr>'; //替换字符串中的一段字符,并输出更新后的字符串;
echo strlen($strtext).'<hr>';
echo rtrim($strtext,'com').'<hr>';
echo ltrim($strtext,'www').'<hr>';
$strtext = '<li>'.$strtext.'</li>'.'<?php $sum6=2 ?>'.'<script>let a = 1;</script>';
echo $strtext.'<hr>';
echo strip_tags($strtext).'<hr>';
echo str_repeat($strtext,2).'<hr>';// 复制字符串
// $sum7 = 0xfff;
// echo hex2bin($sum7);
$strtext = 'www.baidu.com';
print_r(str_split($strtext)) ; // 将字符串转变为数组
echo '<hr>';
echo substr_count($strtext,'w').'<hr>'; // 计算字符出现的次数
echo strtoupper($strtext).'<hr>'; // 转换英文字符串大写;
echo strtolower(strtoupper($strtext)).'<hr>'; // 转换英文字符串为小写;
//url
// print_r($_SERVER) ;
echo $_SERVER['QUERY_STRING'].'<hr>';
$_SERVER['QUERY_STRING'] = 'a=1&b=2&c=3';
echo print_r($_SERVER['QUERY_STRING']).'<hr>' ;
parse_str($_SERVER['QUERY_STRING'],$arr); // 将查询字符串转为数组
printf('<pre>%s<pre>',print_r($arr,true)) ;
echo '<hr>';
$url = 'http://phpedu.io/0810/0810zuoye.php?a=1&b=2&c=3';
$arr2 = parse_url($url); // 将url字符串地址转为数组;
printf('<pre>%s</pre>',print_r($arr2,true));
实例结果