【PHP+代码审计】PHP基础——变量和常量的定义和使用

时间:2024-03-14 21:20:35
???? 博主介绍

????‍???? 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】
????点赞➕评论➕收藏 == 养成习惯(一键三连)????
????欢迎关注????一起学习????一起讨论⭐️一起进步????文末有彩蛋
????作者水平有限,欢迎各位大佬指点,相互学习进步!


目录

变量

变量命名规则

预定义变量

可变变量

变量传值

常量

常量基本概念

常量定义形式

系统常量


变量

变量命名规则

1、 在PHP中变量名字必须以“$”符号开始;

2、 名字由字母、数字和下划线“_”构成,但是不能以数字开头;

3、 在PHP中本身还允许中文变量(不建议)。

<?php
//定义变量
$var1 = 2;
//输出变量
echo $var1;
//删除变量,使用unset
unset($var1);

预定义变量

$_GET:获取所有表单以get方式提交的数据

$_POST:POST提交的数据都会保存在此

$_REQUEST:GET和POST提交的都会保存

$GLOBALS:PHP中所有的全局变量

$_SERVER:服务器信息

$_SESSION:session会话数据

$_COOKIE:cookie会话数据

$_ENV:环境信息

$_FILES:用户上传的文件信息

可变变量

可变变量:如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量的值:在变量前面再多加一个$符号。

变量传值

  • 将一个变量赋值给另外一个变量:变量传值
  • 变量传值一共有两种方式:值传递,引用传递

值传递:将变量保存的值赋值一份,然后将新的值给另外一个变量保存(两个变量没有关系)

引用传递:将变量保存的值所在的内存地址,传递给另外一个变量:两个变量指向同一块内存空间(两个变量是同一个值)

新变量 = &老变量;

<?php

    //php变量传值
    //值传递
    $a = 10;
    $b = $a;
    $b = 5;
    echo $a;
    echo "<br/>";
    echo $b;
    echo "<br/>";
    //引用传递
    $c = 10;
    $d = &$c;
    $c = 5;
    echo $c;
    echo "<br/>";
    echo $d;

常量

常量与变量一样,都是用来保存数据的。

const、define修饰

常量基本概念

常量:const/constant,是一种在程序运行当中,不可改变的量(数据)

常量一旦定义,通常数据不可改变(用户级别)

常量定义形式

在PHP中常量有两种定义方式(5.3之后才有两种)

1、 使用定义常量的函数:define(‘常量名’,常量值);

2、 5.3之后才有的:const 长两名 = 值;

<?php
    //php常量
    //使用函数定义常量:define
    define('p1',3.14);

    //使用const关键字定义
    const p2 = 3;

常量名字的命名规则

1、 常量不需要使用“$”符号,一旦使用系统就会认为是变量;

2、 常量的名字组成由字母、数字和下划线组成,不能以数字开头;

3、 常量的名字通常是以大写字母为主(与变量以示区别);

4、 常量命名的规则比变量要松散,可以使用一些特殊字符,该方式只能使用define定义;

注意细节:

1、 Define和const定义的常量是有区别:在于访问权限区别

2、 定义常量通常不区分大小写,但是可以区分,可以参照define函数的第三个参数

说明:常量和变量的使用

1、 凡是数据会可能变化的,那么肯定是用变量

2、 数据不一定会变的,可以使用常量或者变量(变量居多)

3、 数据不允许被修改的,一定用常量

系统常量

系统常量:系统帮助用户定义的常量,用户可以直接使用

常用的几个系统常量

PHP_VERSION:PHP版本号

PHP_INT_SIZE:整形大小

PHP_INT_MAX:整形能表示的最大值(PHP中整形是允许出现负数:带符号)

在PHP中还有一些特殊的常量,他们有双下划线开始+长两名+双下划线结束,这种常量称之为系统魔术常量:魔术常量的值通常会跟着环境变化,但是用户改变不了

DIR:当前被执行的脚本所在电脑的绝对路径

FILE:当前被执行的脚本所在的电脑的绝对路径(带自己文件的名字)

LINE:当前所属的行数

NAMESPACE:当前所属的命名空间

CLASS:当前所属的类

METHOD:当前所属的方法