您现在的位置是:首页 > 技术教程 正文

PHP特性

admin 阅读: 2024-03-17
后台-插件-广告管理-内容页头部广告(手机)

一、Null合并运算符

       Null合并运算符判断一个变量是否存在且值不为null,如果判断条件为真,则返回自身的值,否则返回它的第二个操作数,例如

  1. <?php
  2. $site = $_GET['site'] ?? '教程';
  3. print($site);
  4. print(PHP_EOL);
  5. ?>

运行后为

教程

二、 match表达式

        match是一个表达式,表示其结果可以存储到变量中返回,它的分支仅支持单行表达式,不需要中断与陈述,并且可以进行严格比较,区分变量类型,例如

  1. $str = 'sun';
  2. echo match($str){
  3. 'sun','sunny'=>'晴',
  4. 'snow'=>'雪',
  5. default=>'都不是'
  6. };

将变量sun与sunny赋值“晴”,将snow赋值“雪”

三、生成器

生成器是专门处理了大数组和携程通信而出现的,

例如

  1. <?php
  2. function xrange($start, $end, $step=1)
  3. {
  4. for ($i=$start; $i<$end; $i+=$step){
  5. yield $i;
  6. }
  7. }
  8. foreach (xrange(0, 1000) as $item)
  9. {
  10. echo $item;
  11. }

四、捕获错误信息

  1. <?php
  2. try {
  3. $pdo = new PDO('mysql:host=localhost;dbname=test;', 'root', '123456');
  4. $msg = "开始正常执行";
  5. } catch (Error $e) {
  6. $msg = "错误:" . $e->getMessage();
  7. } catch (Exception $e) {
  8. $msg = "异常:" . $e->getMessage();
  9. } finally {
  10. file_put_contents('error.log', $msg, FILE_APPEND);
  11. }

五、太空船运算

       用于比较两个表达式a**和**b,假如a**小于、大于或等于**b时,它会分别返回值-1、1或0

  1. <?php
  2. print( 1 <=> 1);print("
    "
    );
  3. print( 1 <=> 2);print("
    "
    );
  4. print( 2 <=> 1);print("
    "
    );
  5. print( 1.5 <=> 1.5);print("
    "
    );
  6. print( 1.5 <=> 2.5);print("
    "
    );
  7. print( 2.5 <=> 1.5);print("
    "
    );
  8. print( "a" <=> "a");print("
    "
    );
  9. print( "a" <=> "b");print("
    "
    );
  10. print( "b" <=> "a");print("
    "
    );
  11. ?>

运算结果为

0

-1

1

0

-1

1

0

-1

1

六、利用define()来定义常量数组

例如

  1. <?php
  2. define('sites', [
  3. 'Google',
  4. 'Runoob',
  5. 'Taobao'
  6. ]);
  7. print(sites[1]);
  8. ?>

 运行结果为

runoob

七、超全局变量

php中许多预定义变量都是“超全局”的,这意味着它们在一个脚本的全部作用域中都可以,在函数中无需执行globe$variable就可以访问它们

这些全局变量有

 $GLOBALS — 引用全局作用域中可用的全部变量
$_SERVER — 获取服务端相关信息
$_REQUEST — 获取提交参数
$_POST — 获取 POST 提交参数
$_GET — 获取 GET 提交参数
$_FILES — 获取上传文件
$_ENV — 操作环境变量
$_COOKIE — 操作 Cookie
$_SESSION — 操作 Session

八、构造器

可以使用更简便的方法来初始一个变量的属性,可以构造方法括号中的初始化对象的属性,并指定属性的权限

例如 

  1. class People {
  2. public function __construct(
  3. public int $age=10,
  4. private string $name="lilith",
  5. ) {}
  6. public function getName() {
  7. return $this->name;
  8. }
  9. }
  10. $a = new People(11, 'zhangsan');
  11. var_dump($a->age);
  12. //var_dump($a->name);
  13. var_dump($a->getName());

 九、除法除整商

例如

  1. <?php
  2. echo intdiv(14,3);

将返回它的整数部分

十、命名空间成员的批量导入

例如

  1. <?php
  2. use App\Course\{
  3. Common\Lesson,
  4. Base\Teacher
  5. };
  6. new Lesson();
  7. new Teacher();

 十一、生成器的委托

生成器的委托操作,把一个复杂的生成器分离成若干简单的生成器

例如

  1. <?php
  2. function builder()
  3. {
  4. yield '奥特之王发出指定';
  5. if (mt_rand(0, 1) == 0) {
  6. yield from tl();
  7. } else {
  8. yield from dj();
  9. }
  10. }
  11. function tl()
  12. {
  13. yield "迪迦你去打小怪兽";
  14. }
  15. function dj()
  16. {
  17. yield "戴拿你去打小怪兽";
  18. }
  19. $builder = builder();
  20. foreach ($builder as $item)
  21. {
  22. echo "{$item}
    "
    ;
  23. }

十二、返回整型变量

在实例中,要求返回结果为整数

例如

  1. <?php
  2. declare(strict_types=1);
  3. function returnIntValue(int $value): int
  4. {
  5. return $value;
  6. }
  7. print(returnIntValue(5));
  8. ?>

运行结果为 

5

十三、发动机

它把一个方法通过yiedl变作一个对象并进行遍历

例如

  1. function gen(){
  2. yield 1;
  3. yield 2;
  4. yield from gen2();
  5. }
  6. function gen2(){
  7. yield 3;
  8. yield 4;
  9. }
  10. foreach (gen() as $value){
  11. echo $value.PHP_EOL;
  12. }

运行结果为

1 2 3 4

十四、便利的命名参数

在传参时可以跳过可选参数,格式如argName:value

例如

 

  1. function namedArgs($a, $b=1, $c=2, $d=3) {
  2. var_dump($a);
  3. var_dump($b);
  4. var_dump($c);
  5. var_dump($d);
  6. }
  7. namedArgs(1, c:44);

运行结果为

int(1)

int(1)

int(44)

int(3)

十五、联合类型

可以同时指定形参的多种类型格式为int或string或array

例如

  1. <?php
  2. declare(strict_types=1);
  3. function UnionTypeTest(int|string|float $arg) {
  4. var_dump($arg);
  5. }
  6. UnionTypeTest(1);
  7. UnionTypeTest("1");
  8. UnionTypeTest(1.1);
  9. UnionTypeTest([1]);
  10. ?>

 十六、php的强类型绕过

1、使用md5值完全相同的值绕过

例如

  1. $a=$_GET['a'];
  2. $b=$_GET['b'];
  3. 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()循环对数组内部指针不再起作用

  1. $arr = [1,2,3];
  2. foreach ($arr as &$val) {
  3. echo current($arr);
  4. }

按照值进行循环的时候,foreach()是对该数组的拷贝操作

  1. $arr = [1,2,3];
  2. foreach ($arr as $val) {
  3. unset($arr[1]);
  4. }

 二十、变量处理机制修改

对变量、属性和方法的间接调用现在将严格遵循从左到右的顺序来解析,而不是之前的混杂着几个特殊案例的情况。 下面这张表说明了这个解析顺序的变化。

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索