• php 变量


    变量

    基本含义

    变量是包含了一个名称和一个值的“标识符”。

    php中,变量应该这样去理解:

     

    当我们在代码中使用$v1这个变量名,就是指使用“1”这个数据值。

    比如:echo $v1; //输出1

    当我们在代码中对$v1这个变量进行一定的“运算”,也就是对这个数据1进行运算:

    比如:$v1++; //就是将1的值自加1,即结果数据变成了2

    形式:变量必须以$开头,后面紧跟变量名

    注意:通常,在“能够出现”变量的语法中,只要出现$符号,并在其后出现紧挨着的字符,就会被识别为一个变量,即使不存在该变量,比如:

    echo  “人民币符合¥像个羊,美元符号$象个钱”; //这里就会有问题!

    变量的基本使用

    定义变量(赋值):直接给变量赋值,就是定义;

    不支持js中的那种“定义但不赋值”的语法。

    换句话说,第一次给一个变量赋值,就算定义变量。

    取值:所有需要一个变量值的语句中,就会取得该变量的值,常见包括:

    输出:echi $v1; //取得$v1的值,并输出

    给其他变量赋值$v2 = $v1; //取得$v1的值,并赋值给$v2

    参与运算:$v3 = $v1 + 3; //取得$v1的值,并跟3相加,。。。。

    判断变量是否存在isset()

    存在,就返回true,不存在就返回false

    实际上,如果一个变量的值是null,返回的也是false

     

    修改变量值(赋值):

    第二次及以后给一个变量赋值,就算修改变量值

    删除unset():就是断开变量名跟数据之间的“引用关系

    命名规则

    通常命名包括变量名,函数名,常量名,类名,接口名,等等。。。。

    这里介绍的命名规则,是相对通用的,有个别地方或许有一些细节出入,通常尽量不涉及不常见情形。

    基本规则:

    1,只能使用大小写字母,下划线(_),数字

    2,数字不能开头

    3,不能跟所在环境(系统)的关键字重名(比如ifforfunction.....

    行业规则(潜规则):

    基本规则,保证的是语法的正确性。

    行业规则,保证的是是否能得到别人的尊重!

    行业规则中,有如下几种常用的命名规则:

    1,驼峰命名法:

    示例:name,  myNamemyFatherName

    2,帕斯卡命名法:

    示例:Name,  MyNameMyFatherName

    3,下划线间隔法:

    示例:name,  my_amemy_father_name

    变量间的传值方式

    总体说明:

    1,这里讨论的传值方式是指:一个变量对另一个变量

    2,它不仅仅适用于赋值语句,也适用于其他有同样含义的语句,比如:函数的实参到形参

    3,传值方式只有2种:值传递,引用传递

    4php中,所有变量,默认都是值传递。

    5,要想使用引用传递,必须使用引用传递的符号: &

    值传递(相互独立)

    是指将一个变量的数据值(数据内容)拷贝一份,然后赋值给另一个变量。

    代码示例:

    图示如下:

    复制完之后,这两个变量就没有关系了(互相独立)!

    结果为:

     

    引用传值:(相关联)

    是指将一个变量的引用关系拷贝一份,然后赋值给另一个变量,即另一个变量也同样由该关系决定了指向某个数据:

    代码示例:

     

    图示如下:

     

    赋值(传值)完之后,两个变量指向同样一个数据。

    我们有知道,对变量的操作就是对数据的操作。

    则:

    对变量v1的操作,改变的数据,也就是体现为v2也发生了改变。

    测试:

     

    结果为:

     

    另外,在这种引用传值的情况下,unset一个变量,则另一个跟它有关(指向同样数据的关系)的变量,并不受影响。

    测试:

     

    结果:

     

    可变变量 $$$def;

    所谓可变变量,就是一个变量的名,又是一个变量。

    可变变量的语法是php的很特殊的语法——其他语言中少见。

    $v1 = “abc”; //这是一个字符串变量,其内容是字符串“abc

    $abc = 10; //这是一个普通变量,其内容是数字10

    echo  $$v1; //此时,就是所谓“可变变量”

    怎么理解:

    1,凡是$符号出现,就会有可能理解为是一个变量

    2,这里第一个“$”出现了,则php就视图将其解释为一个变量,变量名是$v1;

    3,我们有知道,$v1的值是”abc”

    4,那么,第一个“$”符号后面的变量名,就得到为“abc

    5,即:echo 试图输出的是变量$abc, 自然是数字10

    实际上,理论上,可变变量的嵌套还可以更多,比如:$$$def;

    预定义变量

    综述:

    1:预定义变量又叫超全局变量,包括:

    $_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS,  $_COOKIE, $_SESSION, ..........(大约10个)

    2:作用域问题

    php中,自定义的变量的作用域,分两种:全局作用域(函数外),局部作用域(函数内)。

    但:

    预定义变量的作用域称为“超全局作用域”:全局作用域 + 局部作用域的总和(函数内外全都可用)

    3:数据类型问题:

    超全局变量都是数组!

    $_GET变量(数组):

    get这个词,常常出现在这里:<form  action=”abc.php”  method=”get” >.....</form>

    这叫做“表单以get方式提交数据”

    $_GET这个预定义数组变量,就是指以这种方式提交的所有数据的集合(数组)

    对应来说,也可以以post方式提交数据

    注意:get这个词,似乎没有中文翻译。

    实际上,在网页中,以get方式提交数据有多种形式:

    形式一

    <form  action=”abc.php”  method=”get” >

    项目1<input type=”text”   name=”uName”   />

    项目2<input type=”password”   name=”uPswd”   />

    <input type=”submit”  value=”提交”  />

    </form>

    其作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php)

    形式二

    <a  href=”abc.php?uName=test1&uPswd=123”  > 文字。。。</a>

    其作用是:用户点击链接后,会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php),这种请求也是get请求

    形式三

    <script>

    location.href = “abc.php?uName=test1&uPswd=123”; //利用location对象的属性href

    </script>

    其作用是:当该行语句执行的时候(通常其实是在函数中),会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php),这种请求也是get请求

    形式四

    <script>

    location.assign( “abc.php?uName=test1&uPswd=123”); //利用location对象的方法assign()

    </script>

    其作用是:当该行语句执行的时候(通常其实是在函数中),会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php),这种请求也是get请求

    不管哪种形式的get提交过来的数据,获取数据是一样的:

    (在abc.php网页中)

    <?php

    $v1 = $_GET[‘uName’]; //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)

    $v2 = $_GET[‘uPswd’]; //该键名必须跟提交的时候的名字完全一致(区分大小写)

    ?>

    举例:

     

    提交后:

     

    $_POST变量(数组)

    类似$_GET变量(数组),$_POST代表页面通过post方式提交过来的数据所形成的数组。

    post提交数据,通常只有一种形式:

    <form  action=”abc.php”  method=”post” >

    项目1<input type=”text”   name=”uName”   />

    项目2<input type=”password”   name=”uPswd”   />

    <input type=”submit”  value=”提交”  />

    </form>

    其作用是:用户填写表单数据,并提交后,会将数据发送(提交)给页面abc.php,其实也可以理解为“打开”该网页(abc.php),还可以理解为“请求”该网页(abc.php)

    接收post数据的形式为:

    (在abc.php网页中)

    <?php

    $v1 = $_POST[‘uName’]; //单引号也可以用双引号,本质是一个字符串,其实是数组的键名(下标)

    $v2 = $_POST[‘uPswd’]; //该键名必须跟提交的时候的名字完全一致(区分大小写)

    也可以显示所有post数据:

    var_dump($_POST)

    ?>

    通常,网页中的form表单,一般都用post方式,get方式主要体现在其他3种形式。

    小案例:

    设计一个页面,可以对2个数据进行基本算术运算(+-*/),使用post方式

    $_REQUEST变量(数组)

    $_REQUEST数组,其实并不是一个独立的数据来源,而是$_POST数据和$_GET数据的“总和”

    $_REQUEST数组中包括了所有$_POST数据和$_GET数据——其实是由系统内部自动存储的。

    通常,$_POST数据和$_GET数据不会“同时出现”,$_REQUEST数组就代表了其中之一。

     

     

    则他们接收数据都一样:

     

    下面来看看:getpost数据同时提交的情形:

    此时,一般就只有一种html语法形式会出现该情形,如下:

    <form  action="abc.php?a=5&b=10"  method="POST" > ...

    项目1<input type=”text”   name=”uName”   />

    项目2<input type=”password”   name=”uPswd”   />

    <input type=”submit”  value=”提交”  />

    </form>

    则此时,uNameuPswd两个数据以post方式提交给abc.php,

    并,同时:a=5b=10两个数据,以get方式提交给abc.php

    则在页面abc.php中:

    这样取得get数据:

    $v1 = $_GET[‘a’];

    $v2 = $_GET[‘b’];

    这样取得post数据:

    $v3 = $_POST[‘uName’];

    $v4 = $_POST[‘uPswd’];

    但,也可以这样取(全有了):

    $v1 = $_REQUEST[‘a’];

    $v2 = $_REQUEST[‘b’];

    $v3 = $_REQUEST[‘uName’]

    $v4 = $_REQUEST[‘uPswd’]

    get数据和post数据同时提交并其中有重名的时候,情况怎么样呢?

    说明:

    1,尽量避免重名;

    2,如果重名了,此时$_REQUEST只会记录(存储)其中一个数据(要么post数据,要么get数据)

    3,至于记录的是哪个,是有php.ini中的一个设置项来决定:

    3.1  request_order = “GP”; //这是默认值,G代表GETP代表POST

    3.2  含义是:先存储GET数据,再存储POST

    3.3  可见如果重名,此时POST就会覆盖GET数据

    3.4  改为:request_order = “PG” 顺序反过来

     

    结果为:

     

    然后去php.ini中,修改为:request_order = “PG”

    同样的数据,结果却为:

     

    $_GET, $_POST, $_REQUEST三种数据是相互独立的。

    $_SERVER变量(数组)

    该变量存储了服务器端或客户端的一些请求信息或设置信息,比较多,而且不同的服务器和不同的请求页面,其数据项都可能不同。

    常用的有:

    REMOTE_ADDR, 用户的IP地址

    SERVER_ADDR:  服务器端的IP地址

    SERVER_NAME:  服务器名(主机名)

    DOCUMENT_ROOT:  站点绝对路径(其实就是主机设置中的DocumentRoot

    PHP_SELF当前网页的文件路径

    QUERY_STRING: 表示一个get请求的整体字符串,类似这样:

    http://www.abc.com/abc.php?a=5&b=10连接地址中的“a=5&b=10

    输出所有项(可能每台服务器有所差异)

     

    $GLOBALS变量(数组)

    似乎是一个多余的变量:它只是把我们自己定义的所有全局变量存储到该数组中:

    变量名就是该数组的下标(键名),变量值就是对应的值。

     

  • 相关阅读:
    mysql:1153 Got a packet bigger than ‘max_allowed_packet’ bytes的解决方法
    阿里druid数据源配置及数据库密码加密
    使用Druid数据库连接池,配置ConfigFilter对数据库密码加密
    java 反射机制 Class对象在.class字节码中 jvm加载类的时机
    java单例 方式对比 防止序列化/反射攻击 volatile防止指令重排优化
    java httprequest编码/解码
    c struct pointer cast and object oriented
    c struct pointer cast and "object oriented"
    java线程的生命周期(状态:new start wait sleep stop yield)
    java 线程interupt stop(dep)
  • 原文地址:https://www.cnblogs.com/ybygb-geng/p/9534001.html
Copyright © 2020-2023  润新知