PHP特性
后台-插件-广告管理-内容页头部广告(手机) |
一、Null合并运算符
Null合并运算符判断一个变量是否存在且值不为null,如果判断条件为真,则返回自身的值,否则返回它的第二个操作数,例如
- <?php
- $site = $_GET['site'] ?? '教程';
- print($site);
- print(PHP_EOL);
- ?>
运行后为
教程
二、 match表达式
match是一个表达式,表示其结果可以存储到变量中返回,它的分支仅支持单行表达式,不需要中断与陈述,并且可以进行严格比较,区分变量类型,例如
- $str = 'sun';
- echo match($str){
- 'sun','sunny'=>'晴',
- 'snow'=>'雪',
- default=>'都不是'
- };
将变量sun与sunny赋值“晴”,将snow赋值“雪”
三、生成器
生成器是专门处理了大数组和携程通信而出现的,
例如
- <?php
- function xrange($start, $end, $step=1)
- {
- for ($i=$start; $i<$end; $i+=$step){
- yield $i;
- }
- }
- foreach (xrange(0, 1000) as $item)
- {
- echo $item;
- }
四、捕获错误信息
- <?php
- try {
- $pdo = new PDO('mysql:host=localhost;dbname=test;', 'root', '123456');
- $msg = "开始正常执行";
- } catch (Error $e) {
- $msg = "错误:" . $e->getMessage();
- } catch (Exception $e) {
- $msg = "异常:" . $e->getMessage();
- } finally {
- file_put_contents('error.log', $msg, FILE_APPEND);
- }
五、太空船运算
用于比较两个表达式a**和**b,假如a**小于、大于或等于**b时,它会分别返回值-1、1或0
- <?php
- print( 1 <=> 1);print("
"); - print( 1 <=> 2);print("
"); - print( 2 <=> 1);print("
"); - print( 1.5 <=> 1.5);print("
"); - print( 1.5 <=> 2.5);print("
"); - print( 2.5 <=> 1.5);print("
"); - print( "a" <=> "a");print("
"); - print( "a" <=> "b");print("
"); - print( "b" <=> "a");print("
"); - ?>
运算结果为
0
-1
1
0
-1
1
0
-1
1
六、利用define()来定义常量数组
例如
- <?php
- define('sites', [
- 'Google',
- 'Runoob',
- 'Taobao'
- ]);
- print(sites[1]);
- ?>
运行结果为
runoob
七、超全局变量
php中许多预定义变量都是“超全局”的,这意味着它们在一个脚本的全部作用域中都可以,在函数中无需执行globe$variable就可以访问它们
这些全局变量有
$GLOBALS — 引用全局作用域中可用的全部变量
$_SERVER — 获取服务端相关信息
$_REQUEST — 获取提交参数
$_POST — 获取 POST 提交参数
$_GET — 获取 GET 提交参数
$_FILES — 获取上传文件
$_ENV — 操作环境变量
$_COOKIE — 操作 Cookie
$_SESSION — 操作 Session
八、构造器
可以使用更简便的方法来初始一个变量的属性,可以构造方法括号中的初始化对象的属性,并指定属性的权限
例如
- class People {
- public function __construct(
- public int $age=10,
- private string $name="lilith",
- ) {}
- public function getName() {
- return $this->name;
- }
- }
- $a = new People(11, 'zhangsan');
- var_dump($a->age);
- //var_dump($a->name);
- var_dump($a->getName());
九、除法除整商
例如
- <?php
- echo intdiv(14,3);
将返回它的整数部分
十、命名空间成员的批量导入
例如
- <?php
- use App\Course\{
- Common\Lesson,
- Base\Teacher
- };
- new Lesson();
- new Teacher();
十一、生成器的委托
生成器的委托操作,把一个复杂的生成器分离成若干简单的生成器
例如
- <?php
- function builder()
- {
- yield '奥特之王发出指定';
- if (mt_rand(0, 1) == 0) {
- yield from tl();
- } else {
- yield from dj();
- }
- }
- function tl()
- {
- yield "迪迦你去打小怪兽";
- }
- function dj()
- {
- yield "戴拿你去打小怪兽";
- }
- $builder = builder();
- foreach ($builder as $item)
- {
- echo "{$item}
"; - }
十二、返回整型变量
在实例中,要求返回结果为整数
例如
- <?php
- declare(strict_types=1);
- function returnIntValue(int $value): int
- {
- return $value;
- }
- print(returnIntValue(5));
- ?>
运行结果为
5
十三、发动机
它把一个方法通过yiedl变作一个对象并进行遍历
例如
- function gen(){
- yield 1;
- yield 2;
- yield from gen2();
- }
- function gen2(){
- yield 3;
- yield 4;
- }
- foreach (gen() as $value){
- echo $value.PHP_EOL;
- }
运行结果为
1 2 3 4
十四、便利的命名参数
在传参时可以跳过可选参数,格式如argName:value
例如
- function namedArgs($a, $b=1, $c=2, $d=3) {
- var_dump($a);
- var_dump($b);
- var_dump($c);
- var_dump($d);
- }
- namedArgs(1, c:44);
运行结果为
int(1)
int(1)
int(44)
int(3)
十五、联合类型
可以同时指定形参的多种类型格式为int或string或array
例如
- <?php
- declare(strict_types=1);
- function UnionTypeTest(int|string|float $arg) {
- var_dump($arg);
- }
- UnionTypeTest(1);
- UnionTypeTest("1");
- UnionTypeTest(1.1);
- UnionTypeTest([1]);
- ?>
十六、php的强类型绕过
1、使用md5值完全相同的值绕过
例如
- $a=$_GET['a'];
- $b=$_GET['b'];
- md5($a)===md5($b)
2、使用数组绕过
十七、哈希算法
哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。 哈希算法最重要的特点就是: 相同的输入一定得到相同的输出; 不同的输入大概率得到不同的输出。
以下为常用的哈希算法
算法 输出长度(位) 输出长度(字节)
MD5 128 bits 16 bytes
SHA-1 160 bits 20 bytes
RipeMD-160 160 bits 20 bytes
SHA-256 256 bits 32 bytes
SHA-512 512 bits 64 bytes
十八、php弱比较
php弱比较指的是==这种,两个==的时候它的计算方法是先将其转换成同种类型,再进行计算,也就相当于此时它是只比较值的,因此也就出现了php弱比较漏洞,我们也因此实现了绕过。
十九、foreach修改
foreach()循环对数组内部指针不再起作用
- $arr = [1,2,3];
- foreach ($arr as &$val) {
- echo current($arr);
- }
按照值进行循环的时候,foreach()是对该数组的拷贝操作
- $arr = [1,2,3];
- foreach ($arr as $val) {
- unset($arr[1]);
- }
二十、变量处理机制修改
对变量、属性和方法的间接调用现在将严格遵循从左到右的顺序来解析,而不是之前的混杂着几个特殊案例的情况。 下面这张表说明了这个解析顺序的变化。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |