1. PHP变量作用域
2. PHP魔术常量
3. PHP超级全局变量4. PHP表单操作
5. PHPcookie操作6. PHPsession操作
一:PHP 变量作用域
变量的作用域是脚本中变量可被引用或使用的区域。PHP 有四种不同的变量作用域:
local(本地/局部)global(全局)static(静态)parameter(参数);
A)局部和全局作用域
<?php
$x=5; // 全局变量,在当前页面中的任何位置都可以使用
function myTest(){
$y=10; // 局部变量 只能在当前方法中使用echo "<p>方法中输出的值:<p>";
//当我们调用myTest()函数并输出两个变量的值,//函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,
//因为 $x 变量在函数外定义,无法在函数内直接使用,//如果要在一个函数中访问一个全局变量,需要使用 global 关键字。//在方法中调用全局变量
global $x;
echo"变量 x 为: $x";
echo "<br>";
echo"变量 y 为: $y";
echo "<br>-----------------------";
}myTest();
echo "<p>方法外输出的值:<p>";echo"变量 x 为: $x";
echo "<br>";
echo"变量 y 为: $y";
echo "<br>-----------------------";
B)静态作用域
** 方法的运行机制,当方法执行完成后,方法中定义的变量默认会从内存中清除,当再次调用时会重新初始化。
<?php
function test(){
$x = 0;
echo $x;
$x++;}
echo "第一调用test()方法:",test(),"<br>";echo "第二调用test()方法:",test(),"<br>";echo "第三调用test()方法:",test(),"<br>";echo "第四调用test()方法:",test(),"<br>";
echo "<hr>";
function test2(){
//对方法中的 变量声明 static关键字,使其成为静态变量,//当方法执行完成后,该变量不会被销毁,会一直存在与内存中,//当再次调用该方式时,不会重新声明会直接获取该变量static$x= 0;
echo $x;
$x++;
}
echo "第一调用test2()方法:",test2(),"<br>";echo "第二调用test2()方法:",test2(),"<br>";echo "第三调用test2()方法:",test2(),"<br>";echo "第四调用test2()方法:",test2(),"<br>";
C)参数作用域
参数是通过调用代码将值传递给函数的局部变量,参数是在参数列表中声明的,作为函数声明的一部分存在。
<?php
function show($i){
echo "$i";}
show(10);
二:PHP 魔术常量
PHP 向它运行的任何脚本提供了大量的预定义魔术常量,但多数魔术常量是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现。
PHP中存在八个魔术常量它们的值随着它们在代码中的位置改变而改变
1、__LINE__
2、__FILE__
3、__DIR__
4、__FUNCTION__ 当前函数的名称(PHP5.0)
【在PHP4.3时添加,在PHP4时总返回小写方法名】
5、__CLASS__ 返回类的名字(不做介绍)6、__TRAIT__ 用于类继承的代码复用(不做介绍)7、__METHOD__ 返回类方法名(不做介绍)8、__NAMESPACE__ 返回命名空间名(不做介绍)
<?php
echo "当前代码为:第",__LINE__,"行<br>";
echo "当前文件路径和文件名为:",__FILE__,"<br>";echo "当前文件路径为:",__DIR__,"<br>";
function show(){
echo "执行的方法名为:",__FUNCTION__;
}
文件中的当前行号文件的路径和文件名
文件路径
show();
三:PHP 超级全局变量
PHP 定义了九个超级全局变量,在一个PHP脚本的所有作用域中都可以直接使用,不需要特殊声明。PHP九大超级全局变量包括(数组):
1、$GLOBALS 全局变量组
2、$_SERVER
3、$_ENV
4、$_REQUEST
5、$_POST
6、$_GET
7、$_FILES
8、$_COOKIE
9、$_SESSION 回话组(单独讲解)
服务器配置项服务器配置项(被动接受,因服务器不同会发生变化)
请求参数组 (单独讲解)POST请求参数组(单独讲解)
GET请求参数组(单独讲解)文件组(单独讲解)
浏览器cookie组(单独讲解)
<?php
$x = 10;
$y = 20;
function show1(){global $x,$y;
echo "通过全局参数关键字global访问x变量:$x<br>";
echo "通过全局参数关键字global访问y变量:$y<br>";}
show1();
echo "<hr>";
echo "<pre>";
echo "打印全局参数组:<br>";
//$GLOBALS 包含全部的全局参数,
//其中包含 $_GET $_POST $_COOKIE $_FILES 四个超全局参数print_r($GLOBALS);
echo "</pre>";
echo "<hr>";
function show2(){
echo "通过超级全局变量访问x变量:",$GLOBALS['x'],"<br>";
echo "通过超级全局变量访问x变量:",$GLOBALS['y'],"<br>";//除了访问全局变量外,也可以进行全局变量的设置
$temp= "aaaa";
$GLOBALS['str'] = $temp;
}show2();
echo "<pre>";
echo "打印全局参数组:<br>";
print_r($GLOBALS);
echo "</pre>";
echo "通过变量名方式输出:$str";
echo "<pre>";echo"_SERVER 组:";print_r($_SERVER);
echo "<hr>";
echo"_ENV 组:";
//如果输出为空,
//可修改 php.ini 文件中 variables_order = "GPCS" 为 variables_order = "EGPCS"print_r($_ENV);
echo "</pre>";
四:表单操作
A) $_GET 变量 ,该变量用于从get方式提交的请求中获取数据。
<!DOCTYPE html><html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"><title></title>
<link rel="stylesheet" href="">
</head><body>
<form action="01.php">
用户名:<input type="text" name="name">密码:<input type="password" name="password" />性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女
<!--
-->
爱好:<input type="checkbox" name="hobbies" value="吃饭">吃饭<input type="checkbox" name="hobbies" value="睡觉">睡觉<input type="checkbox" name="hobbies" value="打豆豆">打豆豆
<!-- 在页面的复选框按钮中,定义名称时需要使用[]结尾,在PHP后台才能正常获取值 -->爱好:<input type="checkbox" name="hobbies[]" value="吃饭">吃饭
<input type="checkbox" name="hobbies[]" value="睡觉">睡觉
<input type="checkbox" name="hobbies[]" value="打豆豆">打豆豆
学历:<select name="edu">
<option value="大专">大专</option><option value="本科">本科</option><option value="研究生">研究生</option>
</select>
个人简介:<textarea name="info"></textarea><input type="hidden" name="hie" value="aa">
<input type="submit" value="提交"></form>
</body></html>
<?php
$name= $_GET["name"];$pwd= $_GET["password"];$sex= $_GET["sex"];$hobbies= $_GET["hobbies"];$edu= $_GET["edu"];
$info= $_GET["info"];$hie= $_GET["hie"];
echo "姓名为:$name<br>";
echo "密码为:$pwd<br>";
echo "性别为:$sex<br>";
//只能获取复选框的最后一个值,//解决方式,需要在页面定义标签名称时 使用特殊名称定义方式echo "爱好为:$hobbies<br>";
print_r($hobbies);
echo "<br>";
echo "学历为:$edu<br>";echo "简介为:$info<br>";echo "隐藏域为:$hie<br>";
B) $_POST 变量 ,该变量用于从post方式提交的请求中获取数据。
<!DOCTYPE html><html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"><title></title>
<link rel="stylesheet" href="">
</head><body>
<form action="02.php" method="post">
用户名:<input type="text" name="name">
密码:<input type="password" name="password" />
性别:<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女
爱好:<input type="checkbox" name="hobbies[]" value="吃饭">吃饭<input type="checkbox" name="hobbies[]" value="睡觉">睡觉<input type="checkbox" name="hobbies[]" value="打豆豆">打豆豆学历:<select name="edu">
<option value="大专">大专</option><option value="本科">本科</option><option value="研究生">研究生</option>
</select>
个人简介:<textarea name="info"></textarea><input type="hidden" name="hie" value="aa">
<input type="submit" value="提交"></form>
</body></html>
<?php
$name= $_POST["name"];$pwd= $_POST["password"];$sex= $_POST["sex"];$hobbies= $_POST["hobbies"];$edu= $_POST["edu"];
$info= $_POST["info"];$hie= $_POST["hie"];
echo "姓名为:$name<br>";
echo "密码为:$pwd<br>";
echo "性别为:$sex<br>";
//只能获取复选框的最后一个值,//解决方式,需要在页面定义标签名称时 使用特殊名称定义方式echo "爱好为:$hobbies<br>";
print_r($hobbies);
echo "<br>";
echo "学历为:$edu<br>";echo "简介为:$info<br>";echo "隐藏域为:$hie<br>";
*** 如果无法确定前台页面提交的方式
<!DOCTYPE html><html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"><title></title>
<link rel="stylesheet" href="">
</head><body>
<!-- <form action="03.php" method="post"> -->
<form action="03.php" method="get">
用户名:<input type="text" name="name">
密码:<input type="password" name="password" />
性别:<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女
爱好:<input type="checkbox" name="hobbies[]" value="吃饭">吃饭<input type="checkbox" name="hobbies[]" value="睡觉">睡觉<input type="checkbox" name="hobbies[]" value="打豆豆">打豆豆
学历:<select name="edu">
<option value="大专">大专</option><option value="本科">本科</option><option value="研究生">研究生</option>
</select>
个人简介:<textarea name="info"></textarea><input type="hidden" name="hie" value="aa">
<input type="submit" value="提交"></form>
</body></html>
<?php
//通过超全局变量 $_SERVER 可以获取请求的方式$method = $_SERVER["REQUEST_METHOD"];
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
echo "$method<br>";
echo "<hr>";
//先声明变量
$name = $pwd = $sex = $hobbies = $edu = $info = $hie = "";
if ($method=="GET") {
$name = $_GET["name"];
$pwd = $_GET["password"];$sex = $_GET["sex"];$hobbies = $_GET["hobbies"];$edu = $_GET["edu"];
$info = $_GET["info"];
$hie = $_GET["hie"];
}
if ($method=="POST") {
$name = $_POST["name"]; $pwd = $_POST["password"]; $sex = $_POST["sex"]; $hobbies = $_POST["hobbies"]; $edu = $_POST["edu"]; $info = $_POST["info"]; $hie = $_POST["hie"];
}
echo "姓名为:$name<br>";
echo "密码为:$pwd<br>";
echo "性别为:$sex<br>";
//只能获取复选框的最后一个值,//解决方式,需要在页面定义标签名称时 使用特殊名称定义方式echo "爱好为:$hobbies<br>";
print_r($hobbies);
echo "<br>";
echo "学历为:$edu<br>";
echo "简介为:$info<br>";
echo "隐藏域为:$hie<br>";
B) $_REQUEST 变量 ,该变量用于从get|post方式提交的请求中获取数据。
<?php
echo "<pre>";
print_r($_REQUEST);echo "</pre>";
$name= $_REQUEST["name"];$pwd= $_REQUEST["password"];$sex= $_REQUEST["sex"];$hobbies= $_REQUEST["hobbies"];$edu= $_REQUEST["edu"];
$info= $_REQUEST["info"];$hie= $_REQUEST["hie"];
echo "姓名为:$name<br>";
echo "密码为:$pwd<br>";
echo "性别为:$sex<br>";
//只能获取复选框的最后一个值,//解决方式,需要在页面定义标签名称时 使用特殊名称定义方式echo "爱好为:$hobbies<br>";
print_r($hobbies);
echo "<br>";
echo "学历为:$edu<br>";echo "简介为:$info<br>";echo "隐藏域为:$hie<br>";
*** 使用foreach 循环 遍历 请求中的参数
<?php
//三个请求超级全局变量都是数组类型,可以使用foreach 获取值echo "<pre>";
print_r($_GET);
print_r($_POST);
print_r($_REQUEST);echo "</pre>";
echo "<hr>";
foreach ($_REQUEST as $key => $value) {
echo "$key=$value<br>";}
echo "<hr>";
foreach ($_REQUEST as $key => $value) {
//is_array() 用于判断变量是否为数组if(is_array($value)){
foreach ($value as $v) {echo "$key=$v<br>";
}}else{
echo "$key=$value<br>";}
}
*** 当PHP 中无指定 name 的 值时如何判断
<?php
$a = $_REQUEST["a"];
echo "$a<br>";
//isset 用于判断 变量是否被设置var_dump(isset($a));
//unset 用于删除变量unset($a);var_dump(isset($a));
*** PHP表单验证常用方法
> 空判断 empty> 正则表达式判断
<!DOCTYPE html><html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"><title></title>
<link rel="stylesheet" href="">
<style type="text/css">
span {
color: red;
}</style>
</head><body>
<?php
$errorMsg = "";
$str = $_REQUEST["str"];//非空判断if(isset($str)&&empty($str)){
$errorMsg = "不能为空";}
//正则判断
//preg_match(reg,str) 用于正则匹配判断$falg = preg_match("/^[a-zA-Z]*$/",$str);if(isset($str)&&!$falg){
$errorMsg = "不能出现非字母字符";}
?>
<!-- action 不指定 表示提交到本地 --><form action="" method="post">
<!-- 数据回显 --><inputtype="text"name="str"value="<?php echo $str ?>"><span><?phpecho $errorMsg ?></span>
<input type="submit" value="提交"></form>
</body></html>
五:cookie操作
1、cookie 的创建 和有效期设置
方法 setcookie(name,value,expire,path,domain,secure)
该方法有返回值 设置成功返回true 设置失败返回false
参数 |
描述 |
name |
必需。规定 cookie 的名称。 |
value |
必需。规定 cookie 的值。 |
expire |
可选。规定 cookie 的有效期。 |
path |
可选。规定 cookie 的服务器路径。 |
domain |
可选。规定 cookie 的域名。 |
secure |
可选。规定是否通过安全的 HTTPS 连接来传输 cookie。 |
<?php
//设置cookie(在PHP 设置cookie时 不需要人工编码,PHP底层会进行自动的编码)setcookie("name","tom");
//PHP中的 cookie 的设置时间是以 1970年1月1日 0时0分0秒 开始累加计算的
// 设置3600 标识 从1970年1月1日 0时0分0秒 开始计算,
// 则过期时间为 1970年1月2日 1时0分0秒
// time() 函数用于获取 当前时间 和 1970年1月1日 0时0分0秒 之间的秒差//setcookie("pwd","123",3600);setcookie("pwd","123",time()+3600);
2、cookie 的获取
<?php
//获取cookie值(在PHP 获取cookie时 不需要人工解码,PHP底层会进行自动的解码)// 通过超级全局变量 $_COOKIE 进行获取
echo $_COOKIE["name"],"<br>";
echo $_COOKIE["pwd"],"<br>";
//$_COOKIE本身为数组,所以可以循环foreach ($_COOKIE as $key => $value) {
echo "$key=$value<br>";}
4、cookie 的修改
<?php
//cookie 的修改setcookie("name","jack");echo $_COOKIE["name"],"<br>";
5、cookie 的删除
<?php
//cookie 的删除setcookie("name","",time());
六:session操作
1、session 的创建 、设置数据、数据获取、删除数据
PHP 中 要想使用session 首先必须先开启session会话,且session会话的开启是页面级的
<?php
//session 回话开启前,输出超级全局变量 session 返回为""print_r($_SESSION);
var_dump($_SESSION=="");
echo "<br>";
//开启session会话,开启session 回话后 输出超级全局变量session 返回为数组对象session_start();
print_r($_SESSION);
//在session 中存储数据
$_SESSION["user"] = array("name"=>"tom");echo "<pre>";
print_r($_SESSION);
echo "</pre>";
<?php
//该页面用与测试session 变量的存储特性session_start();
echo "<hr>";
print_r($_SESSION);
echo "<hr>";
<?php
session_start();
//通过 unset 方法指定删除 需要清除的数据unset($_SESSION["user"]);
2、session 的销毁
<?php
session_start();session_destroy();