05-变量

作者: 董泽平 | 来源:发表于2019-10-16 11:31 被阅读0次

变量

前面我们只是简单的描述了变量的定义和赋值,这节我们详细讲解php变量

变量的值传递

php的变量和其它编程语言一样,变量之间的赋值只是值拷贝。

$num3 = 10;
$num4 = $num3;
echo $num3." ".$num4."\n";//10 10
$num4 = 20;
echo $num3." ".$num4."\n";//10 20

变量的引用传递

格式:

  • $变量 = &$变量

注意点

  • php的引用传递和C++的语法一摸一样,本质也是一样的,就会说给当前变量起个别名,实际两个变量指向了同一块内存
  • 上面的分析知,引用变量任何一个变量改变,原变量的值都会变。

    $num5 = 10;
    $num6 = &$num5;
    echo $num5." ".$num6."\n";//10 10
    $num6 = 20;
    echo $num5." ".$num6."\n";//20 20

可变变量

格式:

  • $变量1 = 值1,$$变量1 = 值2

注意点:

  • 可变变量的本质就是用原变量的值作为一个新变量使用
  • 可变变量让程序简单,但是有时也会让人懵逼
  • 我本人建议还是少使用

    $num7 = "abc";
    $$num7 = 20;
    echo $num7." ".$$num7."\n";//abc 20
    echo $num7." ".$abc."\n";//abc 20
    

变量作用域

  • 局部变量:函数或者类的方法里定义的
  • 全局变量:php文件定义的变量(非函数里/类的方法里)
  • 超级全局变量:系统自带的,我们不可以创建
  • 静态变量:创建一次,处处使用static开头的

注意点:

  • 全局变量作用范围是整个php文件,局部变量仅仅是当前函数/类的方法里可以用,其它地方都不可以用。
  • php的在局部作用域内访问全局变量需要用$_GLOBAL数组进行访问。
  • php的全局变量都保存在$_GLOBAL数组里面。
  • php的静态变量和其它编程语言一样,创建一次,处处使用。

    $num = 10;//全局变量
    static $snum = 20;//静态变量
    function f1()
    {
        $num = 100;//局部变量,作用范围是当前函数里面
        echo $num;//100
        echo $GLOBALS["num"];//10---$GLOBALS存储所用全局变量
        $snum++;
    }
    echo $num;//10---全局作用域访问全局变量
    f1();

预定义变量

下面我们将6个比较重要的预定义变量,它们6个都是保存基本信息的数组。

  • $_GLOBALS:保存全局变量的数组
  • $_SERVER:保存服务端配置的全部信息
  • $_GET:保存客户端get请求发送的数据
  • $_POST:保存客户端post请求发送的数据
  • $_COOKIE:通过 HTTP Cookies 方式传递给当前脚本的变量的数组。
  • $_SESSION:当前脚本可用 SESSION 变量的数组,主要保存客户端会话

1.$GLOBALS

上面已经说过,$_GLOBAL变量保存了当前php文件所有全局变量,它是一个数组,所以我们可以按照数组键值对的格式访问我们需要查看的数组格式如下:

//定义全局变量
$num = 10;
//格式化输出全局变量数组
print_r($GLOBALS)
//访问你想查看的全局变量   
echo $GLOBALS["全局变量名"];

下图是全部$GLOBALS输出的情况,其中空色标记的是当前页面的全局变量

3.jpg

2.$_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组,我们直接输出它,如下图。

4.jpg

3.$_GET

$_GET通过 URL 参数传递给当前脚本的变量的数组,当然我们可以通过html表单的get提交方式拿到表单的数据。

php里面嵌入html

前面我们只是提了下php文件可以嵌套html代码,此处我将详细讲解php文件代码里嵌入html的方法。

方式1

echo 输出字符串的格式,如下所示

echo "<div>我是div</div>";

方式2

heredoc 输出字符串格式,如下所示(heredoc格式不需要转义,且适合嵌入大段html代码)

echo <<<"doc"
<div>我是div</div>
doc;

方式3

第三种格式就是完整的html代码嵌入php文件里。

<?php
echo "此处写php代码"
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>我是div</div>
</body>
</html>
Get方式提交数据

有了上面的认识,我们可以继续讲解$_GET了,上面说过get提交的方式有两种,我们一一演示下。

1 url地址提交数据

我们通过url参数设置的数据都会保存在$_GET数组里面。只需要输出$_GET数组或者按照对应key输出对用的value值。

  • 在你的url地址后面添加参照?name=dzp&age=21,此时你的数据就是get方式保存到了数组$_GET里面了
5.jpg
  • 在php文件里输出对应页面$_GET数组,我们可以看到我们在url输入的name和age属性都保存在$_GET数组了。

    print_r($_GET);
    //输出:Array ( [name] => dzp [age] => 21 )

2 html表单的get提交

  • 我们通过在php代码里直接嵌入表单的html,并设置表单的提交方式是get,就可以将数据保存到$_GET数组了。

    <?php
    echo <<<"get"
    <form action="" method="get">
        <label>zhanghu1</label>
        <input type="text" name="zh">
        <label>mima1</label>
        <input type="password" name="pw">
        <input type="submit" value="pass">
    </form>
    get;
    
    print_r($_GET);//输出get数组
    if(isset($_GET["zh"]))//检测$_GET["zh"]是否有数据
    {
        echo $_GET["zh"];
    }
    if(isset($_GET["pw"]))////检测$_GET["pw"]是否有数据
    {
        echo $_GET["pw"];
    }

打开php文件,显示如下

6.jpg

此时我在zhanghu1输入了dzp,在mima1输入了123456,显示如下。

7.jpg

4.$_POST

post方式提交数据

我们通过表单的post提交来演示post提交数据,post提交数据比get方式安全,因为它的数据不会出现在浏览器的url头里面。


    <?php
    echo <<<"post"
    <form action="" method="post">
        <label>zhanghu</label>
        <input type="text" name="zh">
        <label>mima</label>
        <input type="password" name="pw">
        <input type="submit" value="pass">
    </form>
    post;
    
    print_r($_POST);//输出post数组
    if(isset($_POST["zh"]))
    {
        echo $_POST["zh"];
    }
    if(isset($_POST["pw"]))
    {
        echo $_POST["pw"];
    }

我们打开php文件,浏览器页面的zhanhu输入了123456,mima栏也输入了123456,如下所示

8.jpg

最后点击pass,页面显示数据如下

9.jpg

好了,get与post方式提交的演示就结束了,可能初次看起来有点懵,建议先理解整个过程,然后你得懂前端的一部分吧。

5.$_COOKIE

  • cookie简介和注意点
    • cookie用来保存客户端的关键信息
    • php里面添加cookie方式:setcookie('key','value');
    • setcookie()函数的参数实际有5个,我们简单的测试用到的是2个。
    • $_COOKIE数组保存了客户端的所有cookie

测试设置浏览器cookie的代码,下图是对应浏览器cookie被保存的页面


    setcookie("name",'dzp');//设置客户端的cookie
    echo $_COOKIE["name"];//输出cookie保存的name,结果是dzp

10.jpg

我们利用cookie可以保存网页的关键信息,例如用户的登陆信息,下面演示一个案例,用php1文件模拟登陆页面,当用户输入正确的信息后,页面跳转到主界面(欢迎界面新的php2文件)我们可以用$_COOKIE将之前php1文件的cookie数据读取出来显示到新界面,当信息输入错误,提示错误,不会跳转到新界面.

步骤一:在php1文件写好post方式提交数据的表单,并且设置读取表单数据,当信息登陆成功后,将用户的名字保存在$_COOKIE数组里面,并跳转,否则提示失败.假设正确的账户是admin正确的密码是123456

php1文件


    /*模拟用户简单登陆,添加cookie*/
    echo <<<"denglu"
    <form action="" method="post">
        <label>name</label>
        <input type="text" name="zh">
        <label>password</label>
        <input type="password" name="mm">
        <input type="submit" value="push">
    </form>
    denglu;
    //拿到用户提交的数据,根据用户名注册cookie
    if(isset($_POST["zh"]) && isset($_POST["mm"]))
    {
        if($_POST["zh"]==="admin" && $_POST["mm"]==="123456")
        {
            //种下cookie,返回到主页面
            setcookie('useName',$_POST["zh"],time()+3600*24);
            header('Location:index.php');
            echo '<script>alert("denglu is ok!")</script>';
        }else{
            echo '<script>alert("denglu is error")</script>';
        }
    }

php2文件


    <?php
    //拿到客户端保存用户姓名的cookie,提示欢迎这个用户,如果cookie保存失败,则跳转到登陆界面
    if(!isset($_COOKIE["useName"]))
    {
        header("Location:03-COOKIE-SESSION.php");
    }else{
        echo "Welcome  ".$_COOKIE["useName"];
    }

首先我先输入错误的登陆信息,提示denglu is error

11.jpg 12.jpg

接着我么来输入正确的登陆信息,此时来到了新的页面,欢迎用户admin

13.jpg 14.jpg

6.$_SESSION

session的用法

  • session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息
  • session_start();客户端开启一个session会话
  • session_id();当前session的值
  • $_SESSION数组保存了当前客户端的所有session

    session_start();//开启一个会话
    echo session_id();//输出session
    $_SESSION["name"] = "dzp";//在session数组保存信息

相关文章

网友评论

      本文标题:05-变量

      本文链接:https://www.haomeiwen.com/subject/znvymctx.html