目录
需求二:
PHP常量
PHP常量介绍
常量是固定值的名称或标识符。常量就像变量一样,除了常量一旦定义后就不能取消定义或更改(魔术常量除外)
常量对于存储脚本运行时不会更改的数据非常有用。此类数据的常见示例包括配置设置,例如数据库用户名和密码,网站的基本URL,公司名称等
PHP常量函数
常量是使用PHP的define()函数定义的,该函数有三个参数:
name:必选参数,常量名称,即标志符
value:必选参数,常量的值
case_insensitive:可选参数,如果设置为true,则该常量大小写不敏感。默认是敏感的
PHP常量的命名约定
常量名称必须遵循与变量名称相同的规则,这意味着有效的常量名称必须以字母或下划线开头,后跟任意数量的字母,数字或下划线,但有一个例外:常量名称不需要前缀$
注:按照惯例,常量名称通常以大写字母书写。这是因为它们易于识别并与源代码中的变量区分开
创建(声明)PHP常量
一旦定义了常量值,就可以随时通过引用其名称来对其进行访问。下面一个简单的示例
<?php
header("content-type:text/html;charset=utf-8"); //保持中文不乱码
// 创建常量GreeTING
define("GreeTING","欢迎用户wan访问",true);
echo GreeTING; // 输出欢迎用户wan访问
echo "<br>"; // 换行符
echo greeting; // 输出greeting常量,会有告警信息,表示常量未创建
?>
案例解释:创建一个不区分大小写的常量,常量值为“欢迎用户wan访问”
常量的作用域
常量被创建之后,默认是全局变量,可以在整个运行脚本的任何地方中调用
以下示例演示了在函数内使用变量,即使常量定义在函数外也可以正常使用
<?php
header("content-type:text/html;charset=utf-8"); //保持中文不乱码
// 创建常量test
define("test","欢迎用户wan访问");
// 常见函数mytest
function mytest() {
echo test;
}
// 调用函数
test();
?>
PHP 变量
PHP变量介绍
变量是用于存储信息的"容器"。
变量可以是很短的名称(如 x 和 y)或者更具描述性的名称(如 age、carname、totalvolume)
PHP 变量规则:
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的(y 和 Y 是两个不同的变量)
注:PHP 语句和 PHP 变量都是区分大小写的
创建(声明)PHP 变量
PHP 没有声明变量的命令
变量在第一次赋值给它的时候被创建
案例一:变量的值
<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>
案列分解:
在上面的语句执行中,变量 txt 将保存值 Hello world!,且变量 x 将保存值 5。
注释:当赋一个文本值给变量时,请在文本值两侧加上引号
案例二:变量的数字运算
<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>
解释案例:
x=5
y=6
z=x+y
我们使用字母(如 x),并给它赋值(如 5)
从上面的表达式 z=x+y ,我们可以计算出 z 的值为 11
在 PHP 中,这些$字母被称为变量
PHP 是一门弱类型语言
在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型
PHP 会根据变量的值,自动把变量转换为正确的数据类型
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称
变量的作用域
变量的作用域是脚本中变量可被引用/使用的部分
变量默认是全局变量,但是全局变量在函数内也不能引用
即变量在函数内定义只能在函数内调用,变量在函数外定义就不能在函数内调用,但是可以通过使用其他函数来设置变量的作用域
变量和常量之间的区别
-
不需要在常量之前写一个美元符号($),而变量中必须在名称前面写一个美元符号。
-
常量不能通过简单的赋值来定义,只能使用define()函数来定义。
-
可以在任何位置定义和访问常量,而无需考虑变量作用域规则。
-
一旦设置了常量,就不能重新定义或取消定义。
变量局部和全局作用域
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问
PHP 有四种不同的变量作用域:
序号 | 作用域 | 描述 |
---|---|---|
1 | local | 局部作用域 |
2 | global | 全局作用域 |
3 | static | 静态作用域 |
4 | parameter | 函数参数作用域 |
1、local(本地的)—— 局部变量的作用域
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问
<?php
function test()
{
$a = 15;
echo "内部输出结果:" . $a;
}
echo "外部输出结果:" . $a; // 无法访问变量 a
echo PHP_EOL;
test();
?>
2、global(总体的)—— 全局变量的作用域
在所有函数外部定义的变量是全局变量,除了函数外,全局变量可以被脚本中的任何部分访问、要在一个函数中访问一个全局变量,需要使用 global 关键字
<?php
$x = 5;
$y = 10;
$z = 0;
function test()
{
global$x,$y,$z;
$z = $x + $y;
}
test();
echo $z;
?>
3、static(静态的)—— static 作用域
当一个函数执行完成时,它的所有变量通常都会被删除,然而,有时需要局部变量不要被删除,要做到这一点,需要在第一次声明变量时使用 static 关键字
<?php
function test() {
static $x=0;
echo $x . " ";
$x++;
}
test();
test();
test();
test();
?>
PHP 将所有的全局变量存储在一个名为 $GLOBALS[index] 的数组里,index 为保存变量的名称
这个数组可以在函数内部访问,也可以直接用来更新全局变量
<?php
$x = 5;
$y = 10;
$z = 0;
function test()
{
$GLOBALS['z'] = $GLOBALS['x']+$GLOBALS['y'];
}
Test();
echo $z;
?>
4、parameter(参数)——参数作用域
参数是通过调用代码将值传递给函数的局部变量
关于局部变量和全局变量的优先级,因为在PHP中函数都有自己单独的作用域,所以在局部变量的优先级要大于全局变量(在你不声明这个变量之前),声明之后此变量就变成了局部变量如果修改值那么全局变量的值也会改变
<?php
$a = 10;
$b = 5;
function test()
{
$a = 15;
$b = 5;
$z = $a-$b;
echo $z;
}
test();
function test1()
{
global $a,$b;
$a = 15;
$b = 5;
$z = $a-$b;
echo PHP_EOL;
echo $z;
}
test1();
function test2()
{
global $a,$b;
$z= $a-$b;
echo PHP_EOL;
echo $z;
}
test2();
?>
PHP函数
PHP 函数准则
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头
内置函数
PHP 的真正威力源自于它的函数,在 PHP 中,提供了超过 1000 个内建的函数。
我们介绍几个常见的函数
phpinfo();
phpinfo()函数可以显示出PHP 所有相关信息,是排查php配置是否出错或漏配模块的主要方式之一
eval();
eval()函数用来执行一个字符串表达式,并返回表达式的值;也就是将eval中的值当成php代码执行
system();
system()函数来执行系统命令,但是杀毒软件会禁止php的命令执行
内建函数
如要在页面加载时执行脚本,可以把它放到函数里
函数是通过调用函数来执行的,如果定义的函数没有调用就不会执行
下面是一个内建函数的格式案例:
<?php
function functionName() // 其中functionname指的是内建函数的名称
{
// 要执行的代码
functionName(); //调用函数
?>
PHP 函数 - 函数传值
<?php
function writeName($fname)
{
echo $fname . " Refsnes.<br>";
}
echo "My name is ";
writeName("Kai Jim");
echo "My sister's name is ";
writeName("Hege");
echo "My brother's name is ";
writeName("Stale");
?>
PHP 函数 - 返回值
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
PHP 一句话木马
语法:
<?php @eval($_POST['hack']); ?>
解析:
<?php ?>是PHP语法的标椎格式
@表示即使语句执行错误,页面也不回显报错信息
eval表示将()中的值当成php代码执行
$_POST代表接收post方式的传值,其中的字符串hack表示表单的name属性,也就是传输参数的名称。如果是要用webshell连接工具连接的话hack就是连接密码
PHP函数利用
1、判断
if else 条件判断语句用于根据不同条件执行不同动作
当编写代码时,常常需要为不同的判断执行不同的动作,可以在代码中使用条件语句来完成此任务
在 PHP 中,提供了下列条件语句:
- if 语句 - 在条件成立时执行代码
- if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
- if...elseif....else 语句 - 在若干条件之一成立时执行一个代码块
- switch 语句 - 在若干条件之一成立时执行一个代码块
if 语句用于仅当指定条件成立时执行代码
案例:如果当前时间小于 20,下面的实例将输出 "Have a good day!":
<?php
$t = 10;
if ($t<"20")
{
echo "Have a good day!";
}
?>
1.PHP - if...else 语句
在条件成立时执行一块代码,条件不成立时执行另一块代码,可以使用 if....else 语句
if...else 语法:
if (条件)
{
条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
案例:如果当前时间小于 20,下面的实例将输出 "Have a good day!",否则输出 "Have a good night!":
<?php
$t=date("H");
if ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
2.PHP - if...elseif....else 语句
在若干条件之一成立时执行一个代码块,可以使用 if....elseif...else 语句
if....elseif...else 语法:
if (条件)
{
if 条件成立时执行的代码;
}
elseif (条件)
{
elseif 条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
案例:如果当前时间小于 10,下面的实例将输出 "Have a good morning!",如果当前时间不小于 10 且小于 20,则输出 "Have a good day!",否则输出 "Have a good night!":
<?php
$t=date("H");
if ($t<"10")
{
echo "Have a good morning!";
}
elseif ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
3.switch语句
switch 语句用于根据多个不同条件执行不同动作。
如果要有选择地执行若干代码块之一,可以使用 switch 语句
swinch语法:
<?php
switch (n)
{
case label1:
如果 n=label1,此处代码将执行;
break;
case label2:
如果 n=label2,此处代码将执行;
break;
default:
如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>
工作原理:首先对一个简单的表达式 n(通常是变量)进行一次计算。将表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行。default 语句用于不存在匹配(即没有 case 为真)时执行
案例:将喜欢的颜色输出到浏览器页面上
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "你喜欢的颜色是红色!";
break;
case "blue":
echo "你喜欢的颜色是蓝色!";
break;
case "green":
echo "你喜欢的颜色是绿色!";
break;
default:
echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>
2、循环
在编写代码时,经常需要让相同的代码块一次又一次地重复运行,我们可以在代码中使用循环语句来完成这个任务
在 PHP 中,提供了下列循环语句:
- while - 只要指定的条件成立,则循环执行代码块
- do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
- for - 循环执行代码块指定的次数
- foreach - 根据数组中每个元素来循环代码块
while 循环
while 循环将重复执行代码块,直到指定的条件不成立
while语法:
while (条件)
{
要执行的代码;
}
案例:首先设置变量 i 的值为 1 ($i=1;),然后,只要 i 小于或者等于 5,while 循环将继续运行。循环每运行一次,i 就会递增 1:
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br>";
$i++;
}
?>
do...while 循环
do...while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环
do...while语法:
do
{
要执行的代码;
}
while (条件);
案例:首先设置变量 i 的值为 1 ($i=1;),然后,开始 do...while 循环,循环将变量 i 的值递增 1,然后输出,先检查条件(i 小于或者等于 5),只要 i 小于或者等于 5,循环将继续运行
<?php
$i=1;
do
{
$i++;
echo "The number is " . $i . "<br>";
}
while ($i<=5);
?>
for 循环
循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块
for语法:
for (初始值; 条件; 增量)
{
要执行的代码;
}
参数介绍:
- 初始值:主要是初始化一个变量值,用于设置一个计数器(但可以是任何在循环的开始被执行一次的代码)
- 条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束
- 增量:主要用于递增计数器(但可以是任何在循环的结束被执行的代码)
注:上面的初始值和增量参数可为空,或者有多个表达式(用逗号分隔)
案例:定义一个初始值为 i=1 的循环。只要变量 i 小于或者等于 5,循环将继续运行。循环每运行一次,变量 i 就会递增 1:
<?php
for ($i=1; $i<=5; $i++)
{
echo "数字为 " . $i . PHP_EOL;
}
?>
3、数组
数组是什么?
数组是一个能在单个变量中存储多个值的特殊变量
案例:如果有一个项目清单(例如:车名字的清单),将其存储到单个变量中
$cars1="Volvo";
$cars2="BMW";
$cars3="Toyota";
然而,如果想要遍历数组并找出特定的一个呢?如果数组的项不只 3 个而是 300 个呢?
数组可以根据键访问其中的值
在 PHP 中创建数组
在 PHP 中,array() 函数用于创建数组:
在 PHP 中,有三种类型的数组:
- 数值数组 - 带有数字 ID 键的数组
- 关联数组 - 带有指定的键的数组,每个键关联一个值
- 多维数组 - 包含一个或多个数组的数组
数值数组
有两种创建数值数组的方法:
自动分配 ID 键(ID 键总是从 0 开始)
$cars=array("Volvo","BMW","Toyota");
// 如果没有指定键值ID,就自动从0开始递增
$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="Toyota";
实例:创建一个名为 $cars 的数值数组,并给数组分配三个元素,后打印一段包含数组值的文本:
<?php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>
获取数组的长度 - count() 函数
count() 函数用于返回数组的长度(元素的数量):
<?php
$cars=array("Volvo","BMW","Toyota");
echo count($cars);
?>
数组编历:遍历并打印数值数组中的所有值,我们可以使用 for 循环,如下所示
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br>";
}
?>
PHP 关联数组
关联数组是使用您分配给数组的指定的键的数组。
这里有两种创建关联数组的方法:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
or
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
随后可以在脚本中使用指定的键:
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>
遍历关联数组:遍历并打印关联数组中的所有值,我们可以使用 foreach 循环,如下所示
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
数组排序
我们将介绍下列 PHP 数组排序函数:
- sort() - 对数组进行升序排列
- rsort() - 对数组进行降序排列
- asort() - 根据关联数组的值,对数组进行升序排列
- ksort() - 根据关联数组的键,对数组进行升序排列
- arsort() - 根据关联数组的值,对数组进行降序排列
- krsort() - 根据关联数组的键,对数组进行降序排列
sort() - 对数组进行升序排列
<?php
$cars=array("Volvo","BMW","Toyota");
//sort($cars); //下面的实例将 $cars 数组中的元素按照字母升序排列:
foreach($cars as $y){
echo $y."</br>";
?>
//其他函数补充
//rsort() - 对数组进行降序排列
//asort() - 根据数组的值,对数组进行升序排列
//arsort() 根据数组的值,对数组进行降序排列
//ksort();根据数组的键,对数组进行升序排列
//krsort() - 根据数组的键,对数组进行降序排列
PHP超级全局变量
PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用
PHP 超级全局变量列表:
- $GLOBALS-->引用全局作用域中可用的全部变量
- $_SERVER-->系统环境变量
- $_REQUEST-->post和get传值都能接收
- $_POST-->接收post传值
- $_GET-->接收get传值
- $_FILES-->上传文件使用
- $_ENV-->服务端环境变量
- $_COOKIE-->用于回话控制
- $_SESSION-->用于回话控制
$GLOBALS
$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问
$GLOBALS 是一个包含了全部变量的全局组合数组,变量的名字就是数组的键
以下实例介绍了如何使用超级全局变量 $GLOBALS:
<?php
$x = 75;
$y = 25;
function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
$_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目
以下实例中展示了如何使用$_SERVER中的元素:
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
函数名 | 描述 |
---|---|
$_SERVER['PHP_SELF'] | 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。_FILE 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。 |
$_SERVER['GATEWAY_INTERFACE'] | 服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。 |
$_SERVER['SERVER_ADDR'] | 当前运行脚本所在的服务器的 IP 地址。 |
$_SERVER['SERVER_NAME'] | 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com) |
$_SERVER['SERVER_SOFTWARE'] | 服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24) |
$_SERVER['SERVER_PROTOCOL'] | 请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。 |
$_SERVER['REQUEST_METHOD'] | 访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。 |
$_SERVER['REQUEST_TIME'] | 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496) |
$_SERVER['QUERY_STRING'] | query string(查询字符串),如果有的话,通过它进行页面访问。 |
$_SERVER['HTTP_ACCEPT'] | 当前请求头中 Accept: 项的内容,如果存在的话。 |
$_SERVER['HTTP_ACCEPT_CHARSET'] | 当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。 |
$_SERVER['HTTP_HOST'] | 当前请求头中 Host: 项的内容,如果存在的话。 |
$_SERVER['HTTP_REFERER'] | 引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。) |
$_SERVER['HTTPS'] | 如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。 |
$_SERVER['REMOTE_ADDR'] | 浏览当前页面的用户的 IP 地址。 |
$_SERVER['REMOTE_HOST'] | 浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。 |
$_SERVER['REMOTE_PORT'] | 用户机器上连接到 Web 服务器所使用的端口号。 |
$_SERVER['SCRIPT_FILENAME'] | 当前执行脚本的绝对路径。 |
$_SERVER['SERVER_ADMIN'] | 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com) |
$_SERVER['SERVER_PORT'] | Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。 |
$_SERVER['SERVER_SIGNATURE'] | 包含了服务器版本和虚拟主机名的字符串。 |
$_SERVER['PATH_TRANSLATED'] | 当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。 |
$_SERVER['SCRIPT_NAME'] | 包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。 |
$_SERVER['SCRIPT_URI'] | URI 用来指定要访问的页面。例如 "/index.html"。 |
$_REQUEST
PHP $_REQUEST 用于收集 HTML 表单提交的数据,不仅能收集GET数据,还能收集POST数据
下面的例子展示了一个包含输入字段及提交按钮的表单,当用户通过点击提交按钮来提交表单数据时, 表单数据将发送到标签的 action 属性中指定的脚本文件
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
echo $name;
?>
</body>
</html>
在这个例子中,我们指定文件本身来处理表单数据,如果您需要使用其他的 PHP 文件来处理表单数据,请修改为您选择的文件名即可。然后,我们可以使用超级全局变量 $_REQUEST 来收集 input 字段的值:
$_POST
PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"
以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至标签中 action 属性中指定的脚本文件
在这个实例中,指定文件来处理表单数据,如果希望其他的PHP文件来处理该数据,可以修改该指定的脚本文件名。然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_POST['fname'];
echo $name;
?>
</body>
</html>
$_GET
PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"
$_GET 也可以收集URL中发送的数据
假定我们有一个包含参数的超链接HTML页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<form action="2.php" method="get">
<input type="text" name="bcd">
</form>
</body>
</html>超链接HTML页面:
代码如下:
<?php
echo $_GET['bcd'];
?>
$_FILES
$_FILES 主要用在当需要上传二进制文件的地方,录入上传一个abc.mp3文件,则服务器端需要获得该文件的相关信息,则通过变量 $_FILES 来取得
$_FILES 超级全局变量包含通过POST方法向服务器上传的数据的有关信息,这个超级全局变量与其他的变量有所不同,它是一个二维数组,包含5个元素
元素/代码 | 描述 |
$_FILES[‘userfile’][‘name’] | 客户端机器文件的原名称 |
$_FILES[‘userfile’][‘type’] | 文件的 MIME 类型,例如“image/gif” |
$_FILES[‘userfile’][‘size’] | 已上传文件的大小,单位为字节 |
$_FILES[‘userfile’][‘tmp_name’] | 文件被上传后在服务端储存的临时文件名 |
$_FILES[‘userfile’][‘error’] | 文件上传相关的错误代码 |
$_ENV
PHP中的$_ENV是一个包含服务器端环境变量的数组,不同系统不完全一样
部分变量示例:
$_ENV[ ‘HOSTNAME’ ] 服务器的主机名
$_ENV[ ‘SHELL’ ] 系统 shell
$_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素,我们可以直接输出它
//输出内容格式清晰,ThinkPHP可以直接用dump()
var_dump($_ENV);
//输出到屏幕
print_r($_ENV);
$_COOKIE
cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值
$_SESSION
PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用
PHP魔术方法
PHP 向它运行的任何脚本提供了大量的预定义常量
不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了
八个魔术常量
它们的值随着它们在代码中的位置改变而改变,这些特殊的常量不区分大小写
- __LINE__
- __FILE__
- __DIR__
- __FUNCTION__
- __CLASS__
- __TRAIT__
- __METHOD__
- __NAMESPACE__
__LINE__
文件中的当前行号
<?php
echo '这是第 " ' . __LINE__ . ' " 行';
?>
输出结果为:这是第 “ 2 ” 行
__FILE__
文件的完整路径和文件名,如果用在被包含文件中,则返回被包含的文件名
自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径
<?php
echo '该文件位于 " ' . __FILE__ . ' " ';
?>
输出结果为:该文件位于 “ D:\phpStudy\phpstudy_pro\WWW\first.php”
__DIR__
文件所在的目录,如果用在被包括文件中,则返回被包括的文件所在的目录
它等价于 dirname(__FILE__),除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
<?php
echo '该文件位于 " ' . __DIR__ . ' " ';
?>
输出结果为:该文件位于 “ D:\phpStudy\phpstudy_pro\WWW\index.php ”
__FUNCTION__
函数名称(PHP 4.3.0 新加),自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写),在 PHP 4 中该值总是小写字母的
<?php
function test() {
echo '函数名为:' . __FUNCTION__ ;
}
test();
?>
输出结果为:函数名为:test
__CLASS__
类的名称(PHP 4.3.0 新加),自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)
在 PHP 4 中该值总是小写字母的,类名包括其被声明的作用区域(例如 Foo\Bar),注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用,当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字
<?php
class test {
function _print() {
echo '类名为:' . __CLASS__ . "<br>";
echo '函数名为:' . __FUNCTION__ ;
}
}
$t = new test();
$t->_print();
?>
输出结果为:
类名为:test
函数名为:_print
__TRAIT__
rait 的名字(PHP 5.4.0 新加),自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits
Trait 名包括其被声明的作用区域(例如 Foo\Bar)
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖,其行为 MyHelloWorld 类中定义的方法一致,优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法
<?php
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
输出结果为:Hello World!
__METHOD__
类的方法名(PHP 5.0.0 新加),返回该方法被定义时的名字(区分大小写)
<?php
function test() {
echo '函数名为:' . __METHOD__ ;
}
test();
?>
输出结果为:函数名为:test
__NAMESPACE__
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)
<?php
namespace MyProject;
echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"
?>
输出结果为:命名空间为:"MyProject"
实验:数字炸弹
需求一:
使用if......else完成数字炸弹
使用switch循环完成数字炸弹
完整代码:
<?php
$num=$_GET["num1"];
$rand=$_GET["rand"];
if ($rand==null){
$rand=rand(10,99);
}
//判断开始
//if elseif else
// if($num==null){
// $a = null;
// }elseif($num>$rand){
// $a = "你输入的值太大了";
// }elseif($num<$rand){
// $a = "你输入的值太小了";
// }else{
// $a = '<script>alert("恭喜你,猜对了");</script>';
// }
//判断开始
//switch
// switch ($num==$rand){
// case true:
// $a = "你输入的值对了了";
// break;
// case false:
// $a = "你输入的值不对";
// break;
// }
//循环开始
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<form action="" method="get">
<input type="password" name="rand" value=<?php echo $rand;?>>
<h2>清空上面的内容,即可重新开始游戏</h2>
</br>
<h1>猜猜我的数字是多少,范围10-99</h1>
猜数字<input type="number" name="num1" value=<?php echo $num;?>>
<input type="submit" value="计算">
<?php echo $a;?>
</br>
</form>
</body>
</html>
需求二:
使用for循环完成自动爆破数字炸弹
使用while和do....while循环完成自动爆破数字炸弹
完整代码:
<?php
$rand=$_GET["rand"];
if ($rand==null){
$rand=rand(10,99);
}
//for循环爆破
// for ($num=0;$num<=$rand;$num++){
// echo "正在爆破".$num;
// $a="爆破成功,结果为".$num;
// }
// $num=0;
// while ($num<=$rand){
// echo "正在爆破".$num;
// $a="爆破成功,结果为".$num;
// $num++;
// }
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<form action="" method="get">
<input type="password" name="rand" value=<?php echo $rand;?>>
<h2>清空上面的内容,即可重新开始游戏</h2>
</br>
<h1>猜猜我的数字是多少,范围10-99</h1>
<input type="submit" value="点击开始自动爆破">
<?php echo $a;?>
</br>
</form>
</body>
</html>