zoukankan      html  css  js  c++  java
  • 前端PHP入门-005-爱情是常量还是变量

    常量

    常——汉语字面为:长久,经久不变。
    常量那就好翻译了:长久不变的值。

    常量的使用范围非常广泛
    我们在以后,定义我们的工作目录、定义一些特点的帐户密码、版本号等我们都会使用到常量。所以这一块的知识,非常重要。
    常量在代码中的定义、书写方式:
    define(常量名,常量值)

    规则说明

    常量值只能为上一章中我们讲到的标量

    1. 常量名可以小写,但是通常大写
    2. 常量名可以不加引号,但是通常加上引号
    3. 在字符串中调用常量的时候,必须在引号外面
    4. 常量名建议只用字母下划线

    代码实验室

    1. 定义和调用一次常量试试
    1. <?php
    2. define('MY_NAME','码迷码迷吽');
    3. //页面输出
    4. echo MY_NAME;
    5. //下面是错误的调用方式
    6. echo '我的名字是MY_NAME';
    7. //正确的调用方式该这么写
    8. echo '我的名字是' . MY_NAME;
    9. ?>
    1. 注意项目实验
    1. <?php
    2. //其实可以小写,但是不好区分,所以我们规定通常大写
    3. define('pangge',true);
    4. echo pangge;
    5. //常量可以在外面不加引号
    6. define(PANG,'不要对未来迷茫,迷茫的时候静下心来coding');
    7. echo PANG;
    8. //---------------上面的代码建议忘记-------------------//
    9. define('PANGSIR','coding很难,找个地方!');
    10. echo PANGSIR;
    11. //只能用标量 -- 去看看数据类型那章
    12. //我在后面用了一个数组,大家学一下就行,会报错的哟
    13. define('BIAO',array(1,2,3));
    14. ?>

    系统常量

    简单接触几个系统常量,内置的常量很重要

    常量 说明
    LINE 当前所在的行
    FILE 当前文件在服务器的路径
    FUNCTIOIN 当前函数名
    CLASS 当前类名
    METHOD 当前成员方法名
    PHP_OS PHP运行的操作系统
    PHP_VERSION 当前PHP的版本
    TRAIT Trait 的名字,php5.4新加
    DIR 文件所在的目录
    NAMESPACE 当前命名空间的名称(区分大小写)

    defined()函数来做安全机制

    简单看,简单报,不用掌握

    defined()我们来学习这种用法,主是是为了防止其他人绕过安全检查文件。

    • 函数:defined(常量)
    • 功能:向函数的括号后面传入常量,如果常量定义了就返回true,否则返回false

    【情景模拟】假设,我们的这套在线电子商城的软件需要付钱,检查是否付费是通过对软件授权检查来完成的,而文件version.php中就有检查授权的功能,我们在软件中规定,没有授权检查文件version.php就不能使用这个软件。所有的代码都包含了version.php。并且为了防止有人盗版,我还可以把version.php的代码进行了加密

    1. 一个文件中间有版本号,版本声明和授权声明。文件名为version.php
    2. 一个文件中有具体的业务功能。例如:用户注册/登录等,文件名为users.php

    我们该怎么做呢?——也就是说不包含 version.php文件就不让,执行users.php之后的代码。

    version.php文件

    1. <?php
    2. //此处是检查是否是否授权的业务部份代码xxxx
    3. define('AUTH',true);
    4. //略过模拟代码xxx行,验证等等
    5. ?>

    users.php文件

    1. <?php
    2. //尝试将include 'version.php'这一行代码注释后再执行看看,对比结果
    3. include 'version.php';
    4. if(!defined('AUTH')){
    5. echo '非法!非法!你尝试跳过授权文件';
    6. exit;
    7. }
    8. //模拟后面用户注册和用户登陆的代码xxx行
    9. echo '用户注册';
    10. ?>

    实验结果可知:version.php必须要包含 ,不然不会显示后面的echo '用户注册';

    include 很重要
    defined 很重要


    # 可变变量

    可变变量,这个词解释的太过于高大上,又叫作变量的变量。
    可变变量其实就是——已声明的变量前,再上变量符

    代码:

    1. <?php
    2. //定义了一个变量叫作 $pang 将$pang这个变量的值设为字符串的sir
    3. $pang = 'sir';
    4. //定义了一个【变量】$sir。将他的值设置为胖先生
    5. $sir = '胖先生';
    6. //$$pang 就是`可变变量`:在已声明的变量$pang前又加上了一个变量符
    7. echo $$pang;
    8. ?>

    代码解释

    1. $$pang
    2. ${$pang} 分成两块来看
    3. ${'pang'} 把变量$pang解释成了sir
    4. $sir $sir也是一个变量对应的值是:胖先生

    猜一猜,(^__^) 嘻嘻……

    1. <?php
    2. $pang = 'sir';
    3. $sir = 'wo';
    4. $wo = 'big';
    5. $big = 'love';
    6. $love = 'wu';
    7. $wu = 'di';
    8. $di = '大爱无敌,请打赏';
    9. //别运行,自己去推理一下代码。也写几个可变变量玩玩吧!
    10. echo $$$$$pang;
    11. ?>

    偷偷说一句: WEB前端的各位学生,看一看就行了!

    外部变量

    别问为什么?就像你为什么要吃饭的问题一样?
    PHP的外部变量是PHP在使用过程中规定好的一些变量。
    这个变量的规定是这样规定的,就这样使用。

    代码实验室

    1.经典示例:注册 user.html

    1. <html>
    2. <head>
    3. </head>
    4. <body>
    5. <form action="reg.php" method="get">
    6. <input type="text" name="account" />
    7. <input type="password" name="password" />
    8. <input type="submit" value="提交数据" />
    9. </form>
    10. </body>
    11. </html>

    没有什么可说的:
    在这段代码的主要意思是把用户和密码,采用get方法,将数据发送给reg.php(在上面代码的第6行规定的)。
    reg.php想办法接收用户传过来的 account 和 password 这两个值

    注:
    1.注意地址栏的变化
    2.表单想要传递数据,控件包含name属性

    2.外部变量:$_GET

    $_GET 的主要作用是将得到get传值的数据。
    method='get' 这就是get请求

    程序处理:reg.php

    1. <?php
    2. //$_GET后面加上中括号,将 account 作为字符串放在中括号里面,就得到了表单里面的<input type="text" name="account" /> 的值
    3. $account = $_GET['account'];
    4. echo $account.'<br />';//胶水
    5. //$_GET['password'] 得到表单<input type="text" name="password" /> 的值
    6. $password = $_GET['password'];
    7. echo $password.'<br />';
    8. ?>

    结果说明:

    图文代码分析

    1. reg.php后面跟了一个?(问号)
    2. 表单里面的 account 变在了地址栏里面
    3. 表单面 account 的值输入的是 pangsir,在 account 后面跟了个=(等号)输入的值
      account(名字)= pangsir(值) 后面的密码是 password(名字)=lovephp(值),中间有&(and符)分开
      密码是可见的,那怎么样保证安全呢。让我在注册的过程当中,密码不在地址栏里面被人看到呢?

    这个时候我们需要使用到post传值,post传值是在地址栏中不可见的

    同样上面例子的代码我们进行修改,html代码如下:

    1. <html>
    2. <head>
    3. </head>
    4. <body>
    5. <!-- 这一行method 对应的值改为了post -->
    6. <form action="reg.php" method="post">
    7. <input type="text" name="account" />
    8. <input type="password" name="password" />
    9. <input type="submit" value="提交" />
    10. </form>
    11. </body>
    12. </html>

    第二个外部变量: $_POST

    1. <?php
    2. $account = $_POST['account'];
    3. echo '您的输入的账号为: '.$account.'<br />';
    4. $password = $_POST['password'];
    5. echo '请保管好你的密码: '.$password.'<br />';
    6. ?>

    运行结果:

    代码继续说:

    1. reg.php后的?(问号)不见了。后面的account和password也不见了。那他怎么传递数据的呢?
    2. 它是通过我们看不见的浏览器的请求头文件传递的数据。所以在URL(网址)栏不可见。

    :附录中有如何通过火狐浏览器的firebug查看传递结果的演示过程。这一块都是HTTP协议规定的传送方式。


    除此之外,我们还有$_REQUEST来接收数据。现在我们这样处理:

    将php代码段中的POST_REQUEST,代码如下:

    第三个外部变量: $_REQUEST

    1. <?php
    2. $account = $_REQUEST['account'];
    3. echo $account.'<br />';
    4. $password = $_REQUEST['password'];
    5. echo $password.'<br />';
    6. ?>

    分别测试get和post请求,使用这种方式

    通过上面的实验你会发现$_REQUEST即可以接收get传值也可以接收post传值。

    邪恶了!大小通吃!

    超全局外部变量

    全局变量名 功能说明
    $_COOKIE 得到会话控制中cookie传值
    $_SESSION 得到会话控制中session的值
    $_FILES 得到文件上传的结果
    $_GET 得到get传值的结果
    $_POST 得到post传值的结果
    $_REQUEST 即能得到get的传值结果,也能得到Post传值的结果

    了解含义,以后讲解超全局的含义


    变量引用

    变量引用很多老师喜欢来用C语言的指针来去讲解。
    我们作为有这么多年开发和教学经验的人来说——大多数学习PHP的人来说根本不了解C语言。
    使用C语言一指针来讲解变量引用,我们觉得画蛇填足。并且,不利于没有C语基础的朋友们学习。

    关于变量引用的知识点,请以我们的讲解为理解的基准:

    我们来测试两端,方便我们的测试
    第一段代码

    1. <?php
    2. $fo = 5;
    3. //$fo的值为5,将5赋值
    4. $bar = $fo;
    5. //$bar的值原来为5,现在将值改为6
    6. $bar = 6;
    7. //$bar的结果为6
    8. echo $bar.'<br />';
    9. //$fo的结果为5
    10. echo $fo.'<br />';
    11. ?>

    第二段代码

    1. <?php
    2. $fo = 5;
    3. //注意,加上了一个&符哟
    4. $bar = &$fo;
    5. $bar = 6;
    6. //$bar的结果为6
    7. echo $bar.'<br />';
    8. //$fo的结果为6
    9. echo $fo.'<br />';
    10. ?>

    为什么两个结果都变成6了呢?

    我经常跟大家这样来举例。我们可以这样来想象:一个变量名,对应了一个数据值
    如下图:

    而加上&(and 符后),把变量指向同一个存值空间了,如下图:

    也就是不论fobar的值如何发生变化,fobar也变,barfo也会发生变化。





  • 相关阅读:
    jdbc连接数据库报ORA-12519错误
    Open CV 七种常见阈值分割
    开博第一天
    UIWebView的使用---safri
    转义符
    UIKIT_EXTERN 的简单用法
    iOS 基础 --- tableView的使用(一)
    iOS基础 --- 如何监听一个控件(UITextField篇)
    objective-C和C --- 《位运算》的使用(一)
    assin与weak的区别
  • 原文地址:https://www.cnblogs.com/pangxiansheng/p/8b3f76582f50fb995b57773bf5ed273c.html
Copyright © 2011-2022 走看看