当前位置: 首页 > article >正文

PHP变量

目录

变量的定义

预定义变量

$_SERVER

$_GET

$_POST

$_REQUEST

$_SESSION

$_FILES

变量作用域

global 关键字

static 变量

可变变量

完结


上一篇文章已经学习了PHP的数据类型,今天将学习新的内容:变量。

变量的定义

PHP 中变量用一个美元符号后面跟变量名来表示(如$a),变量名是严格区分大小写的,并且不能以数字开头。

<?php
    $a = 1;
    $b = 'test';
    $c = [1, 2, 3];
    $4d = 2;//非法变量名,以数字开头

预定义变量

像上面的例子这种是我们自定义的变量,在PHP中有一些已经定义好的变量称之为预定义变量。利用这些预定义变量我们可以处理很多问题、实现很多功能,比如通过$_GET、$_POST获取用户输入的数据、$_SERVER获取服务器和执行环境信息等等。接下来我们学习一下几个预定义变量。

$_SERVER

$_SERVER可以获取服务器和执行环境信息,下面配合示例进行简单介绍,如果想了解它包含的所有信息可以直接打印$_SERVER即可。

<?php
    var_dump($_SERVER['SERVER_NAME']);//域名,结果:string 'a.com'
    var_dump($_SERVER['SERVER_PORT']);//端口,结果:string '80'
    var_dump($_SERVER['REQUEST_METHOD']);//请求方式,结果:string 'GET'
    var_dump($_SERVER['REQUEST_URI']);//请求的URI,结果:/1.php

输出结果

$_GET

它是一个通过 URL 参数(又叫 query string)传递给当前脚本的变量的数组。

<?php
    var_dump($_GET);

输出结果

可以看到我们通过URL的方式传递的两个参数服务器都接收到了。

$_POST

当POST请求的Content-type是application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前变量。

#示例,先创建1.php文件用于提交数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传Demo</title>
</head>
<body>

<form action="/2.php" method="post" enctype="multipart/form-data">
    账号:<input name="account"><br/>
    密码:<input name="password"><br/>
    <input type="submit" value="提交">
</form>

</body>
</html>

创建2.php接收数据

<?php
    var_dump($_POST);

访问1.php,填写并提交数据

提交后会自动跳转至2.php,执行结果如下

$_REQUEST

包含了$_GET,$_POST 和 $_COOKIE 的数组。跟上面的示例差不多,这里就不再演示了。

通过http方式请求时,如果有携带cookie,则会传递到这个变量中。

$_SESSION

session是一种存贮机制,$_SESSION变量可以获取到session的所有数据。

$_FILES

获取当前上传文件的相关信息,如名称、类型、大小、临时存放路径等。

#示例,先创建1.php文件,用于上传文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传Demo</title>
</head>
<body>

<form action="/2.php" method="post" enctype="multipart/form-data">
    <label for="fileUpload">选择文件:</label>
    <input type="file" id="fileUpload" name="file">
    <input type="submit" value="上传文件">
</form>

</body>
</html>

创建2.php文件用于接收上传的文件。

<?php
    var_dump($_FILES);

访问1.php,并选择文件上传

 点击上传之后会自动跳转到2.php,结果如下

变量作用域

变量的作用域是定义该变量的上下文。PHP 有函数作用域和全局作用域。在函数之外定义的任何变量都仅限于全局作用域。该怎么理解这句话呢,也就是说有函数作用域和全局作用域,函数之外定义的变量只能在全局作用域使用(即函数之外使用)。我们通过下面的例子辅助理解。

全局作用域变量,函数内部无法使用

<?php
    $a = 2;
    function test() {
        echo $a;
    }
    test();

结果

可以看到报错了:变量没有定义。

global 关键字

如果我们要使用这个$a,则需要使用到global关键字:global关键字用于将变量从全局作用域绑定到局部作用域。将创建引用同名全局变量的局部变量。如果全局变量不存在,则将在全局作用域内创建该变量并赋值为 null

#示例 使用global关键字

<?php
    $a = 2;
    function test() {
        global $a;
        echo $a;
    }
    test();

 执行结果

static 变量

变量作用域的另一个重要特性是 static 变量。静态变量仅在局部函数作用域中存在,但当程序执行离开此作用域时,其值并不丢失。

#示例,非静态变量例子

<?php
    function test() {
        $a = 2;
        echo $a . ' -- ';
        $a++;
    }
    //执行5次
    test();test();test();test();test();

执行结果

2 -- 2 -- 2 -- 2 -- 2 -- 

由于每次调用test方法,变量a都会重新赋值,所以执行结果都一样。

#示例,静态变量例子

<?php
    function test() {
        static $a = 2;
        echo $a . ' -- ';
        $a++;
    }
    //执行5次
    test();test();test();test();test();

执行结果

2 -- 3 -- 4 -- 5 -- 6 -- 

使用static关键字声明使得变量a成为了静态变量,因此它只会在第一次调用的时候执行初始化(即a=2)。

可变变量

定义:一个变量的变量名可以动态的设置。其实就是使用变量作为另外一个变量名。

<?php
   $a = 'test';
   $$a = '可变变量';
   echo $$a . PHP_EOL;
   //其实就是
   echo $test;

执行结果

可变变量
可变变量

完结

如果你在阅读这篇文章时有所收获,请不要忘记点赞评论加关注,你的支持是我创作的最大动力。当然,如果你在文中发现了疏漏之处,或是有着其他的见解,欢迎私信与我交流。


我是老卢,一个热爱分享、不断探索的知识旅者。


http://www.kler.cn/a/511587.html

相关文章:

  • Web前端开发技术之HTMLCSS知识点总结
  • PortSwigger靶场练习---第二关-查找和利用未使用的 API 端点
  • AIGC视频生成明星——Emu Video模型
  • “libcudart,so.1 1.0“ loss解决方案
  • 软件测试——期末复习
  • ChatGPT 写作系列
  • TiDB 和 MySQL 的关系:这两者到底有什么不同和联系?
  • Linux(NFS服务)
  • SoC芯片架构揭秘:从Arm核心到高速通信
  • angular项目知识点
  • 《重生到现代之从零开始的C++生活》—— 入门基础语法2
  • Qt:自定义tooltip
  • SpringBoot节假日(OneAPI和天聚数行)
  • 【系统分享01】Python+Vue电影推荐系统
  • ASP.NET Core 中基于 Cookie 的身份鉴权实现
  • 什么是HTTP POST请求?初学者指南与示范
  • HackMyVM-Klim靶机的测试报告
  • 复杂查询优化:避免 SQL 查询中的 N+1 查询问题
  • HTML-BFC+SEO+标签应用实例
  • 3.3 OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南
  • 探秘 JMeter 前置处理器:让性能测试如虎添翼
  • 【深入解析】棋类游戏算法:Minimax, Negamax, 蒙特卡洛树搜索与AlphaZero
  • 基于单片机的多功能门铃控制系统设计(论文+源码)
  • 自动化测试随笔一
  • 运行fastGPT 第五步 配置FastGPT和上传知识库 打造AI客服
  • 华为AI培训-NLP实验