PHP学习笔记3-php提高

来源:互联网 发布:淘宝销售数据统计 编辑:程序博客网 时间:2024/06/03 17:04

03-PHP提高

1. PHP变量作用域

2. PHP魔术常量
3. PHP超级全局变量4. PHP表单操作
5. PHPcookie操作6. PHPsession操作

一:PHP 变量作用域

变量的作用域是脚本中变量可被引用或使用的区域。PHP 有四种不同的变量作用域:

local(本地/局部)global(全局)static(静态)parameter(参数);

A)局部和全局作用域

page1image5424page1image5584page1image5744page1image5904

<?php
$x=5;//全局变量,在当前页面中的任何位置都可以使用

functionmyTest(){

$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
functiontest(){

page1image12920page1image13080page1image13240page1image13400page1image13560page1image13720page1image13880page1image14040

$x= 0;

echo$x;

$x++;}

echo"第一调用test()方法:",test(),"<br>";echo"第二调用test()方法:",test(),"<br>";echo"第三调用test()方法:",test(),"<br>";echo"第四调用test()方法:",test(),"<br>";

echo"<hr>";

functiontest2(){
//对方法中的 变量声明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
functionshow($i){

echo"$i";}

show(10);

二:PHP 魔术常量

PHP 向它运行的任何脚本提供了大量的预定义魔术常量,但多数魔术常量是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现。

PHP中存在八个魔术常量它们的值随着它们在代码中的位置改变而改变

page2image8040page2image8200page2image8360page2image8520page2image8680page2image8840page2image9000page2image9160page2image9320page2image9480page2image9640page2image9800

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>";

functionshow(){
echo"执行的方法名为:",__FUNCTION__;

}

文件中的当前行号文件的路径和文件名

文件路径

page2image14568page2image14728page2image14888page2image15048

show();

page3image1224page3image1384page3image1544page3image1704

三: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组(单独讲解)

page3image6736page3image6896page3image7056page3image7216

<?php
$x= 10;

$y= 20;

functionshow1(){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>";

functionshow2(){
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>

<metacharset="utf-8">
<
metahttp-equiv="X-UA-Compatible"content="IE=edge"><title></title>
<
linkrel="stylesheet"href="">

</head><body>

<formaction="01.php">
用户名:<inputtype="text"name="name">密码:<inputtype="password"name="password"/>性别:<inputtype="radio"name="sex"value=""><inputtype="radio"name="sex"value="">

page4image6120page4image6280page4image6440page4image6600page4image6760page4image6920page4image7080page4image7240

<!--

-->

爱好:<input type="checkbox" name="hobbies" value="吃饭">吃饭<input type="checkbox" name="hobbies" value="睡觉">睡觉<input type="checkbox" name="hobbies" value="打豆豆">打豆豆

<!--在页面的复选框按钮中,定义名称时需要使用[]结尾,在PHP后台才能正常获取值-->爱好:<inputtype="checkbox"name="hobbies[]"value="吃饭">吃饭
<inputtype="checkbox"name="hobbies[]"value="睡觉">睡觉
<inputtype="checkbox"name="hobbies[]"value="打豆豆">打豆豆

学历:<selectname="edu">
<
optionvalue="大专">大专</option><optionvalue="本科">本科</option><optionvalue="研究生">研究生</option>

</select>
个人简介:<textareaname="info"></textarea><inputtype="hidden"name="hie"value="aa">

<inputtype="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>";

page4image16760page4image16920page4image17080page4image17240page4image17400page4image17560page4image17720page4image17880

B) $_POST 变量 ,该变量用于从post方式提交的请求中获取数据。

page4image18608page4image18768page4image18928page4image19088

<!DOCTYPE html><html>
<
head>

<metacharset="utf-8">
<
metahttp-equiv="X-UA-Compatible"content="IE=edge"><title></title>
<
linkrel="stylesheet"href="">

</head><body>

<formaction="02.php"method="post">
用户名:<inputtype="text"name="name">
密码:<inputtype="password"name="password"/>
性别:<inputtype="radio"name="sex"value="">
<inputtype="radio"name="sex"value="">
爱好:
<inputtype="checkbox"name="hobbies[]"value="吃饭">吃饭<inputtype="checkbox"name="hobbies[]"value="睡觉">睡觉<inputtype="checkbox"name="hobbies[]"value="打豆豆">打豆豆学历:<selectname="edu">

<optionvalue="大专">大专</option><optionvalue="本科">本科</option><optionvalue="研究生">研究生</option>

</select>
个人简介:<textareaname="info"></textarea><inputtype="hidden"name="hie"value="aa">

<inputtype="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>

<metacharset="utf-8">
<
metahttp-equiv="X-UA-Compatible"content="IE=edge"><title></title>
<
linkrel="stylesheet"href="">

</head><body>

<!-- <form action="03.php" method="post"> -->

<formaction="03.php"method="get">
用户名:<inputtype="text"name="name">
密码:<inputtype="password"name="password"/>
性别:<inputtype="radio"name="sex"value="">
<inputtype="radio"name="sex"value="">
爱好:
<inputtype="checkbox"name="hobbies[]"value="吃饭">吃饭<inputtype="checkbox"name="hobbies[]"value="睡觉">睡觉<inputtype="checkbox"name="hobbies[]"value="打豆豆">打豆豆

page5image15824page5image15984page5image16144page5image16304page5image16464page5image16624page5image16784page5image16944page5image17104page5image17264page5image17424page5image17584

学历:<selectname="edu">
<
optionvalue="大专">大专</option><optionvalue="本科">本科</option><optionvalue="研究生">研究生</option>

</select>
个人简介:<textareaname="info"></textarea><inputtype="hidden"name="hie"value="aa">

<inputtype="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>";

page6image19184page6image19344page6image19504page6image59024page6image59184page6image59344page6image59504page6image59664page6image59824page6image59984page6image60144
page7image1016page7image1176

*** 使用foreach 循环 遍历 请求中的参数

page7image2104page7image2264page7image2424page7image2584

<?php

//三个请求超级全局变量都是数组类型,可以使用foreach获取值echo"<pre>";
print_r(
$_GET);
print_r(
$_POST);

print_r($_REQUEST);echo"</pre>";

echo"<hr>";
foreach($_REQUESTas$key=> $value) {

echo"$key=$value<br>";}

echo"<hr>";
foreach($_REQUESTas$key=> $value) {

//is_array()用于判断变量是否为数组if(is_array($value)){

foreach($valueas$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>

<metacharset="utf-8">
<
metahttp-equiv="X-UA-Compatible"content="IE=edge"><title></title>
<
linkrel="stylesheet"href="">
<
styletype="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不指定 表示提交到本地--><formaction=""method="post">

<!--数据回显--><inputtype="text"name="str"value="<?php echo $str ?>"><span><?phpecho $errorMsg ?></span>

page7image18752page7image18912page7image19072page7image19232page7image19392page7image19552page7image19712page7image19872page7image20032page7image20192page7image20352page7image20512page7image20672page7image20832page7image20992page7image21152page7image21312

<inputtype="submit"value="提交"></form>

</body></html>

五:cookie操作

1、cookie 的创建 和有效期设置
方法 setcookie(name,value,expire,path,domain,secure)

该方法有返回值 设置成功返回true 设置失败返回false

page8image3168page8image3328page8image3488page8image3648

参数

描述

name

必需。规定 cookie 的名称。

value

必需。规定 cookie 的值。

expire

可选。规定 cookie 的有效期。

path

可选。规定 cookie 的服务器路径。

domain

可选。规定 cookie 的域名。

secure

可选。规定是否通过安全的 HTTPS 连接来传输 cookie。

page8image23328page8image23488page8image23648page8image23808

<?php

//设置cookie(在PHP设置cookie时 不需要人工编码,PHP底层会进行自动的编码)setcookie("name","tom");
//PHP中的cookie的设置时间是以197011000秒 开始累加计算的
//设置3600标识 从197011000秒 开始计算,

//则过期时间为197012100
// time()函数用于获取 当前时间 和197011000秒 之间的秒差//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($_COOKIEas$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);

page8image34064page8image34224page8image34384page8image34544page8image34704page8image34864page8image35024page8image35184page8image35344page8image35504page8image35664page8image35824page8image35984page8image36144page8image36304page8image36464page8image36624page8image36784page8image36944page8image37104page8image37264page8image37424page8image37584page8image37744page8image37904page8image38064page8image38224page8image38384page8image38544page8image38704page8image38864page8image39024

//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();

page9image5000page9image5160page9image5320page9image5480page9image5640page9image5800page9image5960page9image6120page9image6280page9image6440page9image6600page9image6760page9image6920page9image7080page9image7240page9image7400