常——汉语字面为:长久,经久不变。
常量那就好翻译了:长久不变的值。
常量的使用范围非常广泛。
我们在以后,定义我们的工作目录、定义一些特点的帐户密码、版本号等我们都会使用到常量。所以这一块的知识,非常重要。
常量在代码中的定义、书写方式:
define(常量名,常量值)
常量值只能为上一章中我们讲到的标量
大写加上引号必须在引号外面字母和下划线
<?phpdefine(‘MY_NAME‘,‘码迷码迷吽‘);//页面输出echo MY_NAME;//下面是错误的调用方式echo ‘我的名字是MY_NAME‘;//正确的调用方式该这么写echo ‘我的名字是‘ . MY_NAME;?>
<?php//其实可以小写,但是不好区分,所以我们规定通常大写define(‘pangge‘,true);echo pangge;//常量可以在外面不加引号define(PANG,‘不要对未来迷茫,迷茫的时候静下心来coding‘);echo PANG;//---------------上面的代码建议忘记-------------------//define(‘PANGSIR‘,‘coding很难,找个地方!‘);echo PANGSIR;//只能用标量 -- 去看看数据类型那章//我在后面用了一个数组,大家学一下就行,会报错的哟define(‘BIAO‘,array(1,2,3));?>
简单接触几个系统常量,内置的常量很重要
| 常量 | 说明 |
|---|---|
LINE |
当前所在的行 |
FILE |
当前文件在服务器的路径 |
FUNCTIOIN |
当前函数名 |
CLASS |
当前类名 |
METHOD |
当前成员方法名 |
| PHP_OS | PHP运行的操作系统 |
| PHP_VERSION | 当前PHP的版本 |
TRAIT |
Trait 的名字,php5.4新加 |
DIR |
文件所在的目录 |
NAMESPACE |
当前命名空间的名称(区分大小写) |
defined()函数来做安全机制简单看,简单报,不用掌握
defined()我们来学习这种用法,主是是为了防止其他人绕过安全检查文件。
【情景模拟】假设,我们的这套在线电子商城的软件需要付钱,检查是否付费是通过对软件授权检查来完成的,而文件version.php中就有检查授权的功能,我们在软件中规定,没有授权检查文件version.php就不能使用这个软件。所有的代码都包含了version.php。并且为了防止有人盗版,我还可以把version.php的代码进行了加密。
我们该怎么做呢?——也就是说不包含 version.php文件就不让,执行users.php之后的代码。
version.php文件
<?php//此处是检查是否是否授权的业务部份代码xxxxdefine(‘AUTH‘,true);//略过模拟代码xxx行,验证等等?>
users.php文件
<?php//尝试将include ‘version.php‘这一行代码注释后再执行看看,对比结果include ‘version.php‘;if(!defined(‘AUTH‘)){echo ‘非法!非法!你尝试跳过授权文件‘;exit;}//模拟后面用户注册和用户登陆的代码xxx行echo ‘用户注册‘;?>
实验结果可知:version.php必须要包含 ,不然不会显示后面的echo ‘用户注册‘;
include 很重要
defined 很重要
# 可变变量
可变变量,这个词解释的太过于高大上,又叫作变量的变量。
可变变量其实就是——已声明的变量前,再上变量符。
代码:
<?php//定义了一个变量叫作 $pang 将$pang这个变量的值设为字符串的sir$pang = ‘sir‘;//定义了一个【变量】$sir。将他的值设置为胖先生$sir = ‘胖先生‘;//$$pang 就是`可变变量`:在已声明的变量$pang前又加上了一个变量符echo $$pang;?>
代码解释
$$pang${$pang} 分成两块来看${‘pang‘} 把变量$pang解释成了sir$sir 而$sir也是一个变量对应的值是:胖先生
猜一猜,(^__^) 嘻嘻……
<?php$pang = ‘sir‘;$sir = ‘wo‘;$wo = ‘big‘;$big = ‘love‘;$love = ‘wu‘;$wu = ‘di‘;$di = ‘大爱无敌,请打赏‘;//别运行,自己去推理一下代码。也写几个可变变量玩玩吧!echo $$$$$pang;?>
偷偷说一句: WEB前端的各位学生,看一看就行了!
别问为什么?就像你为什么要吃饭的问题一样?
PHP的外部变量是PHP在使用过程中规定好的一些变量。
这个变量的规定是这样规定的,就这样使用。
1.经典示例:注册 user.html
<html><head></head><body><form action="reg.php" method="get"><input type="text" name="account" /><input type="password" name="password" /><input type="submit" value="提交数据" /></form></body></html>
没有什么可说的:
在这段代码的主要意思是把用户和密码,采用get方法,将数据发送给reg.php(在上面代码的第6行规定的)。
reg.php想办法接收用户传过来的 account 和 password 这两个值
注:
1.注意地址栏的变化
2.表单想要传递数据,控件包含name属性
2.外部变量:$_GET
$_GET 的主要作用是将得到
get传值的数据。
method=‘get‘ 这就是get请求
程序处理:reg.php
<?php//$_GET后面加上中括号,将 account 作为字符串放在中括号里面,就得到了表单里面的<input type="text" name="account" /> 的值$account = $_GET[‘account‘];echo $account.‘<br />‘;//胶水//$_GET[‘password‘] 得到表单<input type="text" name="password" /> 的值$password = $_GET[‘password‘];echo $password.‘<br />‘;?>
结果说明:

图文代码分析
这个时候我们需要使用到post传值,post传值是在地址栏中不可见的。
同样上面例子的代码我们进行修改,html代码如下:
<html><head></head><body><!-- 这一行method 对应的值改为了post --><form action="reg.php" method="post"><input type="text" name="account" /><input type="password" name="password" /><input type="submit" value="提交" /></form></body></html>
第二个外部变量: $_POST
<?php$account = $_POST[‘account‘];echo ‘您的输入的账号为: ‘.$account.‘<br />‘;$password = $_POST[‘password‘];echo ‘请保管好你的密码: ‘.$password.‘<br />‘;?>
运行结果:

代码继续说:
注:附录中有如何通过火狐浏览器的firebug查看传递结果的演示过程。这一块都是HTTP协议规定的传送方式。
除此之外,我们还有$_REQUEST来接收数据。现在我们这样处理:
将php代码段中的_REQUEST,代码如下:
第三个外部变量: $_REQUEST
<?php$account = $_REQUEST[‘account‘];echo $account.‘<br />‘;$password = $_REQUEST[‘password‘];echo $password.‘<br />‘;?>
分别测试get和post请求,使用这种方式
通过上面的实验你会发现$_REQUEST即可以接收get传值也可以接收post传值。
邪恶了!大小通吃!
| 全局变量名 | 功能说明 |
|---|---|
$_COOKIE |
得到会话控制中cookie传值 |
$_SESSION |
得到会话控制中session的值 |
$_FILES |
得到文件上传的结果 |
$_GET |
得到get传值的结果 |
$_POST |
得到post传值的结果 |
$_REQUEST |
即能得到get的传值结果,也能得到Post传值的结果 |
了解含义,以后讲解超全局的含义
变量引用很多老师喜欢来用C语言的指针来去讲解。
我们作为有这么多年开发和教学经验的人来说——大多数学习PHP的人来说根本不了解C语言。
使用C语言一指针来讲解变量引用,我们觉得画蛇填足。并且,不利于没有C语基础的朋友们学习。
关于变量引用的知识点,请以我们的讲解为理解的基准:
我们来测试两端,方便我们的测试
第一段代码
<?php$fo = 5;//$fo的值为5,将5赋值$bar = $fo;//$bar的值原来为5,现在将值改为6$bar = 6;//$bar的结果为6echo $bar.‘<br />‘;//$fo的结果为5echo $fo.‘<br />‘;?>
第二段代码
<?php$fo = 5;//注意,加上了一个&符哟$bar = &$fo;$bar = 6;//$bar的结果为6echo $bar.‘<br />‘;//$fo的结果为6echo $fo.‘<br />‘;?>
为什么两个结果都变成6了呢?
我经常跟大家这样来举例。我们可以这样来想象:一个变量名,对应了一个数据值。
如下图:

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

也就是不论bar的值如何发生变化,bar也变,fo也会发生变化。
原文:http://www.cnblogs.com/pangxiansheng/p/8b3f76582f50fb995b57773bf5ed273c.html