目录
通过实例学习 PHP:
我们的 PHP 在线实例让您能够更简单的学习 PHP,实例中包含了 PHP 的源码及运行结果。
<!DOCTYPE html>
<html>
<body>
<?php
echo "Hello World!";
?>
</body>
</html>
PHP 能做什么?
- PHP 可以生成动态页面内容
- PHP 可以创建、打开、读取、写入、关闭服务器上的文件
- PHP 可以收集表单数据
- PHP 可以发送和接收 cookies
- PHP 可以添加、删除、修改您的数据库中的数据
- PHP 可以限制用户访问您的网站上的一些页面
- PHP 可以加密数据
通过 PHP,您不再限于输出 HTML。您可以输出图像、PDF 文件,甚至 Flash 电影。您还可以输出任意的文本,比如 XHTML 和 XML。
基本的 PHP 语法
PHP 脚本可以放在文档中的任何位置。
PHP 脚本以 <?php 开始,以 ?> 结束:
<?php
// PHP 代码
?>
PHP 文件的默认文件扩展名是 ".php"。
PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。
下面,我们提供了一个简单的 PHP 文件实例,它可以向浏览器输出文本 "Hello World!":
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
通过 PHP,有两种在浏览器输出文本的基础指令:echo 和 print。
<?php
// 这为单行注释
# 这也为单行注释
/*
这为多行注释
多行注释
多行注释
*/
echo "Hello World!";
?>
PHP 变量
变量是用于存储信息的"容器":
<?php
$x=7;
$y=6;
$z=$x+$y;
echo $z;
?>
与代数类似
x=7
y=6
z=x+y
在代数中,我们使用字母(如 x),并给它赋值(如7)。
从上面的表达式 z=x+y ,我们可以计算出 z 的值为 13。
在 PHP 中,这些字母被称为变量。
注意:变量是用于存储数据的容器。
PHP 变量
与代数类似,可以给 PHP 变量赋予某个值(x=5)或者表达式(z=x+y)。
变量可以是很短的名称(如 x 和 y)或者更具描述性的名称(如 age、haoname、totalvolume)。
totalvolume: 总体积
age:年龄; 年龄段
haoname:好名称
PHP 变量规则:
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
注意:PHP 语句和 PHP 变量都是区分大小写的。
创建(声明)PHP 变量
PHP 没有声明变量的命令。
变量在您第一次赋值给它的时候被创建:
<?php
$txt="Hello world!";
$x=6;
$y=13.5;
?>
在上面的语句执行中,变量 txt 将保存值 Hello world!,且变量 x 将保存值 6。
注释:当您赋一个文本值给变量时,请在文本值两侧加上引号。
PHP 是一门弱类型语言
在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型。
PHP 会根据变量的值,自动把变量转换为正确的数据类型。
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。
PHP 变量作用域
变量的作用域是脚本中变量可被引用/使用的部分。
PHP 有这几种不同的变量作用域:
- local 局部作用域
- global 全局作用域
- static 静态作用域
- parameter 函数参数作用域
局部和全局作用域
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问:
<?php
$x=6; // 全局变量
function myTest()
{
$y=13; // 局部变量
echo "<p>测试函数内变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
}
myTest();
echo "<p>测试函数外变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
?>
在以上实例中 myTest() 函数定义了 $x 和 $y 变量。 $x 变量在函数外声明,所以它是全局变量 , $y 变量在函数内声明所以它是局部变量。
当我们调用myTest()函数并输出两个变量的值, 函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为 $x 变量在函数外定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。
然后我们在myTest()函数外输出两个变量的值,函数将会输出全局变量 $x 的值,但是不能输出 $y 的值,因为 $y 变量在函数中定义,属于局部变量。
注意:你可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内。
PHP global 关键字
global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:
<?php
$x=6;
$y=13;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 19
?>
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
上面的实例可以写成这样:
<?php
$x=6;
$y=13;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;
?>
Static 作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用 static 关键字:
<?php
function myTest()
{
static $x=6;
echo $x;
$x++;
echo PHP_EOL; // 换行符
}
myTest();
myTest();
myTest();
?>
然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
注释:该变量仍然是函数的局部变量。
参数作用域
参数是通过调用代码将值传递给函数的局部变量。
参数是在参数列表中声明的,作为函数声明的一部分:
<?php
function myTest($x)
{
echo $x;
}
myTest(6);
?>
下面为网友的笔记:
- 1、定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾。
- 2、函数内定义的变量就是局部变量,它的作用域为函数定义范围内。
- 3、函数之间存在作用域互不影响。
- 4、函数内访问全局变量需要 global 关键字或者使用 $GLOBALS[index] 数组
- 5、在 php 中函数是有独立的作用域,所以局部变量会覆盖全局变量,即使局部变量中没有全局变量相同的变量,也会被覆盖。如下:
<?php $a=5; $b=3; function t() { echo $a-$b; // 输出 0 } t(); ?>
要想在函数中直接使用全局变量可以通过 global 关键字声明或者通过 php 中自定义的 $GLOBALS 数组获取:
<?php $a=6; $b=3; function t1() { global $a,$b; echo $a-$b; // 输出 3 } t1(); echo PHP_EOL; function t3() { echo $GLOBALS['a']-$GLOBALS['b']; // 输出 3 } t3(); ?>
PHP 变量作用域
变量的作用域是脚本中变量可被引用和使用的部分,PHP 中有四种不同的变量作用域:
序号 作用域 描述 1 local 局部作用域 2 global 全局作用域 3 static 静态作用域 4 parameter 函数参数作用域
local(本地的)—— 局部变量的作用域
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。
<?php function test() { $a = 16; echo "内部输出结果:" . $a; } echo "外部输出结果:" . $a; // 无法访问变量 a echo PHP_EOL; test(); ?>
输出结果:
外部输出结果: 内部输出结果:16global(总体的)—— 全局变量的作用域
在所有函数外部定义的变量是全局变量,除了函数外,全局变量可以被脚本中的任何部分访问、要在一个函数中访问一个全局变量,需要使用 global 关键字。
<?php $x = 6; $y = 13; $z = 0; function test() { global$x,$y,$z; $z = $x + $y; } test(); echo $z; ?>
结果:19
PHP 将所有的全局变量存储在一个名为 $GLOBALS[index] 的数组里,index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
<?php $x = 6; $y = 13; $z = 0; function test() { $GLOBALS['z'] = $GLOBALS['x']+$GLOBALS['y']; } Test(); echo $z; ?>
结果为:19
static(静态的)—— static 作用域
当一个函数执行完成时,它的所有变量通常都会被删除。
然而,有时需要局部变量不要被删除,要做到这一点,请在您第一次声明变量时使用 static 关键字。
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
<?php function test() { static $x=6; echo $x . " "; $x++; } test(); test(); test(); test(); ?>
结果:6 7 8 9
每次调用函数时, 该变量将会保留请前函的前被调用的值一次。
parameter(参数)——参数作用域
参数是通过调用代码将值传递给函数的局部变量。
关于局部变量和全局变量的优先级,因为在PHP中函数都有自己单独的作用域,所以在局部变量的优先级要大于全局变量(在你不声明这个变量之前),声明之后此变量就变成了局部变量如果修改值那么全局变量的值也会改变。
<?php $a = 13; $b = 6; function test() { $a = 19; $b =6; $z = $a-$b; echo $z; } test(); function test1() { global $a,$b; $a = 19; $b = 6; $z = $a-$b; echo PHP_EOL; echo $z; } test1(); function test2() { global $a,$b; $z= $a-$b; echo PHP_EOL; echo $z; } test2(); ?>
结果:13 13 13
PHP 5 echo 和 print 语句
在 PHP 中有两个基本的输出方式: echo 和 print。
本章节中我们会详细讨论两个语句的用法,并在实例中演示如何使用 echo 和 print。
PHP echo 和 print 语句
echo 和 print 区别:
- echo - 可以输出一个或多个字符串
- print - 只允许输出一个字符串,返回值总为 1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
PHP echo 语句
echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。
显示字符串
下面的实例演示了如何使用 echo 命令输出字符串(字符串可以包含 HTML 标签):
<?php
echo "<h2>PHP 很有趣!</h2>";
echo "Hello world!<br>";
echo "我要学 PHP!<br>";
echo "这为个", "字符串,", "使用了", "多个", "参数。";
?>
显示变量
下面的实例演示了如何使用 echo 命令输出变量和字符串:
<?php
$txt1="学习 PHP";
$txt2="RUNOOB.COM";
$cars=array("Volvo","BMW","Toyota");
echo $txt1;
echo "<br>";
echo "在 $txt2 学习 PHP ";
echo "<br>";
echo "我衣服的牌子为 {$cars[0]}";
?>
PHP print 语句
print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。
显示字符串
下面的实例演示了如何使用 print 命令输出字符串(字符串可以包含 HTML 标签):
<?php
print "<h2>PHP 很有趣!</h2>";
print "Hello world!<br>";
print "我要好学习 PHP!";
?>
显示的变量
下面的实例演示了如何使用 print 命令输出变量和字符串:
<?php
$txt1="学习 PHP";
$txt2="RUNOOB.COM";
$cars=array("Volvo","BMW","Toyota");
print $txt1;
print "<br>";
print "在 $txt2 学习 PHP ";
print "<br>";
print "我的衣服牌子为 {$cars[0]}";
?>
下面为网友笔记:
echo 和 print语句的区别:
1、echo 可以输出一个或多个字符串;
2、print 只允许输出一个字符串,返回值总为 1;
3、echo 输出的速度比 print 快;
4、echo 没有返回值,print 有返回值 1;
5、print $a 和 print "$a" 效果相同,echo 同理。
6、print "text$a text" 和 print "text $a text" 和 print "text{$a}text" 都可以正常显示 $a 的值,不使用 {} 则 &a 之后必须有一个空格,不然就无法识别变量("text$atext" 会识别为变量 $atext)echo 同理。
两者相同点:
- echo 和 print 都是语言结构(官方文档解释为language construct);
- echo 和 print 都是用来输出字符串的;
- 当同时只有一个参数的时候,echo 和 print 后面的括号(parenthesis)都是可选的,即:echo ($argument1) 等价于 echo $argument1,print(argument)等价于print argument;
- echo 和 print 在输出之前,都会将参数的进行转换,尝试转换为字符串类型。
两者的区别:
- echo能接受N个字符串类型的参数(注意:有多个参数的时候,不能使用括号,即echo $arg1,$arg2是正确的,echo($arg1,$arg2)会导致解析错误); print只能接收1个字符串类型的参数;
- echo没有返回值; print有返回值,其值永远为int类型的1。
- 在这里引用PHP官方原文档的说明 : "The major differences to echo are that print only accepts a single argument and always returns 1."
PHP EOF(heredoc) 运用的说明:
PHP EOF(heredoc)为一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。
使用概述:
- 1. 必须后接分号,否则编译通不过。
- 2. EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
- 3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
- 4. 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
- 5. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。
<?php
echo <<<EOF
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
?>
注意:
1.以 <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。
2.开始标记和结束标记相同,比如常用大写的 EOT、EOD、EOF 来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可。
3.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符 . 或 , 来拼接,如下:
<?php
$name="runoob";
$a= <<<EOF
"abc"$name
"123"
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
?>
笔记哦
- 1.PHP 定界符 EOF 的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
- 2.在 PHP 定界符 EOF 中的任何特殊字符都不需要转义;
- 3.PHP 定界符 EOF
补充一下上一个笔记的内容,EOF 中是会解析 html 格式内容的,并且在双引号内的内容也有转义效果。
具体见下面例子:
<?php $name="变量会被解析"; $a=<<<EOF $name<br><a>html格式会被解析</a><br/>双引号和Html格式外的其他内容都不会被解析 "双引号外所有被排列好的格式都会被保留" "但是双引号内会保留转义符的转义效果,比如table:\t和换行:\n下一行" EOF; echo $a; ?>
加不加引号转义字符都有效。
PHP 数据类型
PHP 变量存储不同的类型的数据,不同的数据类型可以做不一样的事情。
PHP 支持以下几种数据类型:
- String(字符串)
- Integer(整型)
- Float(浮点型)
- Boolean(布尔型)
- Array(数组)
- Object(对象)
- NULL(空值)
- Resource(资源类型)
PHP 字符串
一个字符串是一串字符的序列,就像 "Hello world!"。
你可以将任何文本放在单引号和双引号中:
<?php
$x = "Hello world!";
echo $x;
echo "<br>";
$x = 'Hello world!';
echo $x;
?>
PHP 整型
整数是一个没有小数的数字。
整数规则:
- 整数必须至少有一个数字 (0-9)
- 整数不能包含逗号或空格
- 整数是没有小数点的
- 整数可以是正数或负数
- 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
在以下实例中我们将测试不同的数字。
PHP var_dump() 函数返回变量的数据类型和值:
<?php
$x = 5985;
var_dump($x);
echo "<br>";
$x = -345; // 负数
var_dump($x);
echo "<br>";
$x = 0x8C; // 十六进制数
var_dump($x);
echo "<br>";
$x = 048; // 八进制数
var_dump($x);
?>
PHP 浮点型
浮点数是带小数部分的数字,或是指数形式。
在以下实例中我们将测试不同的数字。 PHP var_dump() 函数返回变量的数据类型和值:
<?php
$x = 13.365;
var_dump($x);
echo "<br>";
$x = 3.6e3;
var_dump($x);
echo "<br>";
$x = 8E-5;
var_dump($x);
?>
PHP 布尔型
布尔型可以是 TRUE 或 FALSE。
$x=true;
$y=false;
布尔型通常用于条件判断。在接下来的章节中你会学到更多关于条件控制的教程。
PHP 数组
数组可以在一个变量中存储多个值。
在以下实例中创建了一个数组, 然后使用 PHP var_dump() 函数返回数组的数据类型和值:
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
在接下来的章节中你将学到更多关于数组的知识。
PHP 对象
对象数据类型也可以用于存储数据。
在 PHP 中,对象必须声明。
首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。
然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:
<?php
class Car
{
var $color;
function __construct($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
?>
以上实例中PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。
你将会在接下来的章节中学会更多关于对象的知识。
PHP NULL 值
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
可以通过设置变量值为 NULL 来清空变量数据:
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>
PHP 资源类型
PHP 资源 resource 是一种特殊变量,保存了到外部资源的一个引用。
常见资源数据类型有打开文件、数据库连接、图形画布区域等。
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
使用 get_resource_type() 函数可以返回资源(resource)类型:
get_resource_type(resource $handle): string
此函数返回一个字符串,用于表示传递给它的 resource 的类型。如果参数不是合法的 resource,将产生错误。
如下实例吧:
<?php
$c = mysql_connect();
echo get_resource_type($c)."\n";
// 打印:mysql link
$fp = fopen("foo","w");
echo get_resource_type($fp)."\n";
// 打印:file
$doc = new_xmldoc("1.0");
echo get_resource_type($doc->doc)."\n";
// 打印:domxml document
?>
笔记哦
说明:var_dump() 方法,判断一个变量的类型与长度,并输出变量的数值,如果变量有值,则输出是变量的值,并返回数据类型。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
格式:
var_dump ( mixed expression [, mixed expression [, ...]] )注意:用保证 var_dump 中的变量必须是存在的,如果变量不存在则返回 NULL。该函数有输出的功能,因此不必加其它的输出函数。
echo,print,print_r,var_dump 的区别
1.echo
输出一个或者多个字符串。
2.print
和 echo 最主要的区别: print 仅支持一个参数,并总是返回 1。
3.print_r
打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
4.var_dump
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
5.var_dump 和 print_r 的区别
var_dump 返回表达式的类型与值而 print_r 仅返回结果,相比调试代码使用 var_dump 更便于阅读。
PHP 类型比较
虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
例如,"43" 为一个字符串而 43 为一个整数。FALSE 为一个布尔值而 "FALSE" 为一个字符串。
<?php
if(43 == "43") {
echo '1、值相等';
}
echo PHP_EOL; // 换行符
if(43 === "43") {
echo '2、类型相等';
} else {
echo '3、类型不相等';
}
?>
以上实例输出结果为:
1、值相等 3、类型不相等
PHP中 比较 0、false、null
测试代码为:
<?php
echo '0 == false: ';
var_dump(0 == false);
echo '0 === false: ';
var_dump(0 === false);
echo PHP_EOL;
echo '0 == null: ';
var_dump(0 == null);
echo '0 === null: ';
var_dump(0 === null);
echo PHP_EOL;
echo 'false == null: ';
var_dump(false == null);
echo 'false === null: ';
var_dump(false === null);
echo PHP_EOL;
echo '"0" == false: ';
var_dump("0" == false);
echo '"0" === false: ';
var_dump("0" === false);
echo PHP_EOL;
echo '"0" == null: ';
var_dump("0" == null);
echo '"0" === null: ';
var_dump("0" === null);
echo PHP_EOL;
echo '"" == false: ';
var_dump("" == false);
echo '"" === false: ';
var_dump("" === false);
echo PHP_EOL;
echo '"" == null: ';
var_dump("" == null);
echo '"" === null: ';
var_dump("" === null);
以上实例输出结果为:
0 == false: bool(true)
0 === false: bool(false)
0 == null: bool(true)
0 === null: bool(false)
false == null: bool(true)
false === null: bool(false)
"0" == false: bool(true)
"0" === false: bool(false)
"0" == null: bool(false)
"0" === null: bool(false)
"" == false: bool(true)
"" === false: bool(false)
"" == null: bool(true)
"" === null: bool(false)
PHP 5 常量
常量值被定义后,在脚本的其他任何地方都不能被改变。
PHP 常量
常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意: 常量在整个脚本中都可以使用。
设置 PHP 常量
设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
- name:必选参数,常量名称,即标志符。
- value:必选参数,常量的值。
- case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
以下实例我们创建一个 区分大小写的常量, 常量值为 "欢迎访问 Runoob.com":
<?php
// 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting; // 输出 "greeting",但是有警告信息,表示该常量未定义
?>
以下实例我们创建一个 不区分大小写的常量, 常量值为 "欢迎访问 Runoob.com":
<?php
// 不区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com", true);
echo greeting; // 输出 "欢迎访问 Runoob.com"
?>
常量是全局的
常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。
以下实例演示了在函数内使用常量,即便常量定义在函数外也可以正常使用常量。
<?php
define("GREETING", "欢迎访问 Runoob.com");
function myTest() {
echo GREETING;
}
myTest(); // 输出 "欢迎访问 Runoob.com"
?>
篇笔记 写笔记
Testmail
tes***il520@163.com
369
使用常量时,不能在常量名前添加$ 符号,不然会将常量转换成新的未定义变量使用,会导致报错。
<?php define('LOG','OPEN');//定义常量,常量使用不能添加$ echo $LOG; ?>运行结果:
Notice: Undefined variable: LOG in D:\Program Files\apache-tomcat-7.0.75\webapps\myweb\test.php on line 3
PHP 字符串变量
字符串变量用于存储并处理文本。
PHP 中的字符串变量
字符串变量用于包含有字符的值。
在创建字符串之后,我们就可以对它进行操作了。您可以直接在函数中使用字符串,或者把它存储在变量中。
在下面的实例中,我们创建一个名为 txt 的字符串变量,并赋值为 "Hello world!" 。然后我们输出 txt 变量的值:
<?php
$txt="Hello world!";
echo $txt;
?>
注释:当您赋一个文本值给变量时,请记得给文本值加上单引号或者双引号。
现在,让我们来看看一些常用的操作字符串的函数和运算符。
PHP 并置运算符
在 PHP 中,只有一个字符串运算符。
并置运算符 (.) 用于把两个字符串值连接起来。
下面的实例演示了如何将两个字符串变量连接在一起:
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
上面的代码将输出:Hello world! What a nice day!
提示:在上面的代码中,我们已经使用了两次并置运算符。这是由于我们需要在两个字符串之间插入一个空格。
PHP strlen() 函数
有时知道字符串值的长度是很有用的。
strlen() 函数返回字符串的长度(字节数)。
下面的实例返回字符串 "Hello world!" 的长度:
<?php
echo strlen("Hello world!?");
?>
上面的代码将输出:13
提示:strlen() 常常用在循环和其他函数中,因为那时确定字符串何时结束是很重要的。(例如,在循环中,我们需要在字符串中的最后一个字符之后结束循环。)
PHP strpos() 函数
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
下面的实例在字符串 "Hello world!" 中查找文本 "world":
<?php
echo strpos("Hello world!","world");
?>
上面的代码将输出:6
提示:在上面的实例中,字符串 "world" 的位置是 6。之所以是 6 而不是 7 的原因是,字符串中第一个字符的位置是 0,而不是 1。
完整的 PHP String 参考手册
如需查看所有字符串函数的完整参考手册,请访问我们的 PHP String 参考手册。
该参考手册提供了每个函数的简要描述和应用实例!
PHP 运算符
本章节我们将讨论 PHP 中不同运算符的应用。
在 PHP 中,赋值运算符 = 用于给变量赋值。
在 PHP 中,算术运算符 + 用于把值加在一起。
PHP 算术运算符
运算符 | 名称 | 描述 | 实例 | 结果 |
---|---|---|---|---|
x + y | 加 | x 和 y 的和 | 3 + 3 | 6 |
x - y | 减 | x 和 y 的差 | 5 - 2 | 3 |
x * y | 乘 | x 和 y 的积 | 5 * 2 | 10 |
x / y | 除 | x 和 y 的商 | 15 / 5 | 3 |
x % y | 模(除法的余数) | x 除以 y 的余数 | 5 % 2 10 % 8 10 % 2 | 1 2 0 |
-x | 设置负数 | 取 x 的相反符号 | <?php $x = 2; echo -$x; ?> | -2 |
~x | 取反 | x 取反,按二进制位进行"取反"运算。运算规则: ~1=-2; ~0=-1; | <?php $x = 2; echo ~$x; ?> | -3 |
a . b | 并置 | 连接两个字符串 | "Hi" . "Ha" | HiHa |
以下实例演示了使用不同算术运算符得到的不同结果:
<?php
$x=13;
$y=6;
echo ($x + $y); // 输出19
echo '<br>'; // 换行
echo ($x - $y); // 输出7
echo '<br>'; // 换行
echo ($x * $y); // 输出78
echo '<br>'; // 换行
echo ($x / $y); // 输出1.6666666666667
echo '<br>'; // 换行
echo ($x % $y); // 输出7
echo '<br>'; // 换行
echo -$x;
?>
PHP7+ 版本新增整除运算符 intdiv(),该函数返回值为第一个参数除于第二个参数的值并取整(向下取整),使用实例:
<?php
var_dump(intdiv(10, 3));
?>
以上实例会输出:int(3)
PHP 赋值运算符
在 PHP 中,基本的赋值运算符是 =。它意味着左操作数被设置为右侧表达式的值。也就是说,$x = 5 的值是 5。
运算符 | 等同于 | 描述 |
---|---|---|
x = y | x = y | 左操作数被设置为右侧表达式的值 |
x += y | x = x + y | 加 |
x -= y | x = x - y | 减 |
x *= y | x = x * y | 乘 |
x /= y | x = x / y | 除 |
x %= y | x = x % y | 模(除法的余数) |
a .= b | a = a . b | 连接两个字符串 |
以下实例演示了使用不同赋值运算符得到的不同结果:
<?php
$x=13;
echo $x; // 输出13
$y=30;
$y += 100;
echo $y; // 输出130
$z=50;
$z -= 30;
echo $z; // 输出30
$i=5;
$i *= 6;
echo $i; // 输出30
$j=16;
$j /= 2;
echo $j; // 输出8
$k=15;
$k %= 4;
echo $k; // 输出3
?>
以下实例演示了使用不同字符串运算符得到的相同结果:
?php
$a = "Hello";
$b = $a . " world!";
echo $b; // 输出Hello world!
$x="Hello";
$x .= " world!";
echo $x; // 输出Hello world!
?>
PHP 递增/递减运算符
运算符 | 名称 | 描述 |
---|---|---|
++ x | 预递增 | x 加 1,然后返回 x |
x ++ | 后递增 | 返回 x,然后 x 加 1 |
-- x | 预递减 | x 减 1,然后返回 x |
x -- | 后递减 | 返回 x,然后 x 减 1 |
以下实例演示了使用递增/递减运算符得到的结果:
<?php
$x=10;
echo ++$x; // 输出11
$y=10;
echo $y++; // 输出10
$z=6;
echo --$z; // 输出5
$i=5;
echo $i--; // 输出5
?>
PHP 比较运算符
比较操作符可以让您比较两个值:
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x == y | 等于 | 如果 x 等于 y,则返回 true | 5==8 返回 false |
x === y | 绝对等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5==="5" 返回 false |
x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true |
x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true |
x !== y | 不绝对等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!=="5" 返回 true |
x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false |
x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true |
x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false |
x <= y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true |
以下实例演示了使用一些比较运算符得到的不同结果:
<?php
$x=100;
$y="100";
var_dump($x == $y);
echo "<br>";
var_dump($x === $y);
echo "<br>";
var_dump($x != $y);
echo "<br>";
var_dump($x !== $y);
echo "<br>";
$a=50;
$b=90;
var_dump($a > $b);
echo "<br>";
var_dump($a < $b);
?>
PHP 逻辑运算符
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 and y > 1) 返回 true |
x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==6 or y==5) 返回 true |
x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6 y=3 (x==6 xor y==3) 返回 false |
x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 && y > 1) 返回 true |
x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==5 || y==5) 返回 false |
! x | 非 | 如果 x 不为 true,则返回 true | x=6 y=3 !(x==y) 返回 true |
PHP 数组运算符
运算符 | 名称 | 描述 |
---|---|---|
x + y | 集合 | x 和 y 的集合 |
x == y | 相等 | 如果 x 和 y 具有相同的键/值对,则返回 true |
x === y | 恒等 | 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true |
x != y | 不相等 | 如果 x 不等于 y,则返回 true |
x <> y | 不相等 | 如果 x 不等于 y,则返回 true |
x !== y | 不恒等 | 如果 x 不等于 y,则返回 true |
以下实例演示了使用一些数组运算符得到的不同结果:
<?php
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y; // $x 和 $y 数组合并
var_dump($z);
var_dump($x == $y);
var_dump($x === $y);
var_dump($x != $y);
var_dump($x <> $y);
var_dump($x !== $y);
?>
三元运算符
另一个条件运算符是"?:"(或三元)运算符 。
语法格式
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
实例
以下实例中通过判断 $_GET 请求中含有 user 值,如果有返回 $_GET['user'],否则返回 nobody:
<?php
// 普通写法
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
echo $username, PHP_EOL;
// PHP 5.3+ 版本写法
$username = $_GET['user'] ?: 'nobody';
echo $username, PHP_EOL;
?>
注意:PHP_EOL 是一个换行符,兼容更大平台。
在 PHP7+ 版本多了一个 NULL 合并运算符 ??,实例如下:
<?php
// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
?>
组合比较符(PHP7+)
PHP7+ 支持组合比较符(combined comparison operator)也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法格式如下:
$c = $a <=> $b;
解析如下:
- 如果 $a > $b, 则 $c 的值为 1。
- 如果 $a == $b, 则 $c 的值为 0。
- 如果 $a < $b, 则 $c 的值为 -1。
实例如下:
<?php
// 整型
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// 浮点型
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
运算符优先级
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
说明:左 = 从左到右,右 = 从右到左。
结合方向 | 运算符 | 附加信息 |
---|---|---|
无 | clone new | clone 和 new |
左 | [ | array() |
右 | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 类型和递增/递减 |
无 | instanceof | 类型 |
右 | ! | 逻辑运算符 |
左 | * / % | 算术运算符 |
左 | + – . | 算术运算符和字符串运算符 |
左 | << >> | 位运算符 |
无 | == != === !== <> | 比较运算符 |
左 | & | 位运算符和引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
左 | ? : | 三元运算符 |
右 | = += -= *= /= .= %= &= |= ^= <<= >>= => | 赋值运算符 |
左 | and | 逻辑运算符 |
左 | xor | 逻辑运算符 |
左 | or | 逻辑运算符 |
左 | , | 多处用到 |
运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。
<?php
// 优先级: && > = > and
// 优先级: || > = > or
$a = 3;
$b = false;
$c = $a or $b;
var_dump($c); // 这里的 $c 为 int 值3,而不是 boolean 值 true
$d = $a || $b;
var_dump($d); //这里的 $d 就是 boolean 值 true
以上实例输出结果为:
int(3) bool(true)
括号的使用
我们通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。
<?php
// 括号优先运算
$a = 1;
$b = 2;
$c = 3;
$d = $a + $b * $c;
echo $d;
echo "\n";
$e = ($a + $b) * $c; // 使用括号
echo $e;
echo "\n";
?>
以上实例输出结果为:7 9
下面来源于菜鸟网友的笔记:
一个等号 = 用于赋值,如:
$a = 5;两个等号 == 用于比较,值相等,类型不一定相等,如:
5==5 // 返回 true 5=="5" // 返回 true三个等号 === 用于绝对比较,即类型与值都要相等,如:
5===5 // 返回 true 5==="5" // 返回 false组合比较运算符又名太空船运算符,组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法是这样的:
$c = $a <=> $b;这句代码的意思是:
- 如果 $a > $b, $c 的值为 1
- 如果 $a == $b, $c 的值为 0
- 如果 $a < $b, $c 的值为-1
运算符的优先级口诀:括(号)、单(操作数)、算(术)、移(位)、关(系);位(运算符)、逻(辑)、条(件)、赋(值)、逗(号)。
分享一个例子:
$c = &$a;c 是 a 的引用,也就是说 c 和 a 是同一个变量了。
& 是引用的意思,php 没有指针的概念。
<=> 太空船操作符,又称组合比较运算符,结合比较运算符。
组合比较运算符,英文叫作 combined comparison operator,符号为 <=>,它有一个形象的名字,叫作太空船操作符。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法是这样的:
$c = $a <=> $b;这句代码的意思是
- 如果$a > $b, $c 的值为1
- 如果$a == $b, $c 的值为0
- 如果$a < $b, $c 的值为-1
在没有太空船运算符的时候,我们只能这样写代码
$c = $a > $b ? 1 : ( $a==$b ? 0 : -1 );
PHP If...Ele 语句
条件语句用于根据不同条件执行不同动作。
PHP 条件语句
当您编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。
在 PHP 中,提供了下列条件语句:
- if 语句 - 在条件成立时执行代码
- if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
- if...elseif....else 语句 - 在若干条件之一成立时执行一个代码块
- switch 语句 - 在若干条件之一成立时执行一个代码块
PHP - if 语句
if 语句用于仅当指定条件成立时执行代码。
语法
if (条件) { 条件成立时要执行的代码; }
如果当前时间小于 30,下面的实例将输出 "Have a good day!":
<?php
$t=date("H");
if ($t<"30")
{
echo "Have a good day!";
}
?>
PHP - if...else 语句
在条件成立时执行一块代码,条件不成立时执行另一块代码,请使用 if....else 语句。
语法
if (条件)
{
条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
如果当前时间小于 30,下面的实例将输出 "Have a good day!",否则输出 "Have a good night!":
<?php
$t=date("H");
if ($t<"30")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
PHP - if...elseif....else 语句
在若干条件之一成立时执行一个代码块,请使用 if....elseif...else 语句。.
语法:
if (条件) { if 条件成立时执行的代码; } elseif (条件) { elseif 条件成立时执行的代码; } else { 条件不成立时执行的代码; }
如果当前时间小于 9,下面的实例将输出 "Have a good morning!",如果当前时间不小于 9且小于 30,则输出 "Have a good day!",否则输出 "Have a good night!":
<?php
$t=date("H");
if ($t<"19")
{
echo "Have a good morning!";
}
elseif ($t<"30")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
PHP - switch 语句
switch 语句用于根据多个不同条件执行不同动作。
如果您希望有选择地执行若干代码块之一,请使用 switch 语句。
<?php
switch (n)
{
case label1:
如果 n=label1,此处代码将执行;
break;
case label3:
如果 n=label3,此处代码将执行;
break;
default:
如果 n 既不等于 label1 也不等于 label3,此处代码将执行;
}
?>
工作原理:首先对一个简单的表达式 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 "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>
下面为网友的笔记非常好:
在 switch 语句中漏写 break, 可能会使你的输出在你意料之外,下面我来和你们仔细讲解 break 的作用:
下 面的代码是正确示范,结果将是只会输出: 这为a 。倘若你忘敲了 case 'a',case 'b',case 'c' 后的 break,结果将是将代码中的每一条输出语句都输出。
倘若你只敲了 case 'c' 后的 break, 结果将会是输出包含 case 'c' 之前的所有输出语句。
讲到这里大家应该明白了:原来 switch 语句不遇到 break 将不会自己"拐弯",希望这些将会帮助到才接触 php 的菜鸟们!
<?php $x='a'; switch ($x){ case 'a': //变量$x的值和该种情况匹配,将从此处开始执行。 echo "这里为a"."<br>"; break; case 'b': echo "这里为b"."<br>"; break; case 'c': echo "这里为c"."<br>"; break; default: echo "这里为default"; } ?>
PHP 数组
数组能够在单个变量中存储多个值:
<?php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[3] . " and " . $cars[5] . ".";
?>
数组为什么?
数组是一个能在单个变量中存储多个值的特殊变量。
如果您有一个项目清单(例如:车名字的清单),将其存储到单个变量中,如下哦:
$cars1="Volvo";
$cars2="BMW";
$cars3="Toyota";
然而,如果您想要遍历数组并找出特定的一个呢?如果数组的项不只 3 个而是 300 个呢?
解决办法是创建一个数组!
数组可以在单个变量中存储多个值,并且您可以根据键访问其中的值。
在 PHP 中创建数组
在 PHP 中,array() 函数用于创建数组:
array();
在 PHP 中,有三种类型的数组:
- 数值数组 - 带有数字 ID 键的数组
- 关联数组 - 带有指定的键的数组,每个键关联一个值
- 多维数组 - 包含一个或多个数组的数组
PHP 数值数组
这里有两种创建数值数组的方法:
自动分配 ID 键(ID 键总是从 0 开始):
$cars=array("Volvo","BMW","Toyota");
人工分配 ID 键:
$cars[0]="Volvo";
$cars[3]="BMW";
$cars[5]="Toyota";
下面的实例创建一个名为 $cars 的数值数组,并给数组分配三个元素,然后打印一段包含数组值的文本:
<?php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[3] . " and " . $cars[5] . ".";
?>
获取数组的长度 - 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 高级教程部分做详细介绍。
完整的 PHP Array 参考手册
如需查看所有数组函数的完整参考手册,请访问我们的 PHP Array 参考手册。
该参考手册提供了每个函数的简要描述和应用实例!
PHP 数组排序:
数组中的元素可以按字母或数字顺序进行降序或升序排列。
PHP - 数组排序函数
在本章中,我们将一一介绍下列 PHP 数组排序函数:
- sort() - 对数组进行升序排列
- rsort() - 对数组进行降序排列
- asort() - 根据关联数组的值,对数组进行升序排列
- ksort() - 根据关联数组的键,对数组进行升序排列
- arsort() - 根据关联数组的值,对数组进行降序排列
- krsort() - 根据关联数组的键,对数组进行降序排列
sort() - 对数组进行升序排列
下面的实例将 $cars 数组中的元素按照字母升序排列:
<?php
$cars=array("Volvo","BMW","Toyota");
sort($car);
?>
下面的实例将 $numbers 数组中的元素按照数字升序排列:
<?php
$numbers=array(3,6,2,26,11);
sort($numbers);
?>
rsort() - 对数组进行降序排列
下面的实例将 $cars 数组中的元素按照字母降序排列:
<?php
$cars=array("Volvo","BMW","Toyota");
rsort($cars);
?>
下面的实例将 $numbers 数组中的元素按照数字降序排列:
<?php
$numbers=array(3,6,2,23,11);
rsort($numbers);
?>
asort() - 根据数组的值,对数组进行升序排列
下面的实例根据数组的值,对关联数组进行升序排列:
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
asort($age);
?>
ksort() - 根据数组的键,对数组进行升序排列
下面的实例根据数组的键,对关联数组进行升序排列:
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
ksort($age);
?>
arsort() - 根据数组的值,对数组进行降序排列
下面的实例根据数组的值,对关联数组进行降序排列:
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
arsort($age);
?>
krsort() - 根据数组的键,对数组进行降序排列
下面的实例根据数组的键,对关联数组进行降序排列:
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
krsort($age);
?>
完整的 PHP Array 参考手册
如需查看所有数组函数的完整参考手册,请访问我们的 PHP Array 参考手册。
该参考手册提供了每个函数的简要描述和应用实例!
PHP 超级全局变量
为PHP系统中自带的变量,在一个脚本的全部作用域中都可用。
PHP 超级全局变量
PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。
PHP 超级全局变量列表:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
本章节我们将讲解几个常用的超级全局变量,其余变量我们在接下来几个章节会介绍到。
PHP $GLOBALS
$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。
$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
以下实例介绍了如何使用超级全局变量 $GLOBALS:
<?php
$x = 95;
$y = 35;
function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
以上实例中 z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问。
PHP $_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 变量中的重要元素:
元素/代码 | 描述 |
---|---|
$_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"。 |
PHP $_REQUEST
PHP $_REQUEST 用于收集HTML表单提交的数据。
以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:
<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 $_POST
PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。
以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 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>
PHP $_GET
PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。
$_GET 也可以收集URL中发送的数据。
假定我们有一个包含参数的超链接HTML页面:
<html>
<body>
<a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a>
</body>
</html>
当用户点击链接 "Test $GET", 参数 "subject" 和 "web" 将发送至"test_get.php",你可以在 "test_get.php" 文件中使用 $_GET 变量来获取这些数据。
以下实例显示了 "test_get.php" 文件的代码:
<html>
<body>
<?php
echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];
?>
</body>
</html>
提示: 你如果想学习更多关于 $_POST 和 $_GET 的知识,请访问我们的 PHP 表单 章节。
PHP 循环 - While 循环
循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。
PHP 循环
在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行。我们可以在代码中使用循环语句来完成这个任务。
在 PHP 中,提供了下列循环语句:
- while - 只要指定的条件成立,则循环执行代码块
- do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
- for - 循环执行代码块指定的次数
- foreach - 根据数组中每个元素来循环代码块
while 循环
while 循环将重复执行代码块,直到指定的条件不成立。
while (条件) { 要执行的代码; }
下面的实例首先设置变量 i 的值为 1 ($i=1;)。
然后,只要 i 小于或者等于 5,while 循环将继续运行。循环每运行一次,i 就会递增 1:
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br>";
$i++;
}
?>
</body>
</html>
输出:
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5
do...while 语句
do...while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环。
语法:
do { 要执行的代码; } while (条件);
实例:
下面的实例首先设置变量 i 的值为 1 ($i=1;)。
然后,开始 do...while 循环。循环将变量 i 的值递增 1,然后输出。先检查条件(i 小于或者等于 5),只要 i 小于或者等于 5,循环将继续运行:
<html>
<body>
<?php
$i=1;
do
{
$i++;
echo "The number is " . $i . "<br>";
}
while ($i<=5);
?>
</body>
</html>
输出:
The number is 2
The number is 3
The number is 4
The number is 5
The number is 6
for 循环和 foreach 循环将在下一章进行讲解。
PHP 循环 - For 循环
循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。
for 循环
for 循环用于您预先知道脚本需要运行的次数的情况。
语法:
for (初始值; 条件; 增量) { 要执行的代码; }
参数:
- 初始值:主要是初始化一个变量值,用于设置一个计数器(但可以是任何在循环的开始被执行一次的代码)。
- 条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。
- 增量:主要用于递增计数器(但可以是任何在循环的结束被执行的代码)。
注释:上面的初始值和增量参数可为空,或者有多个表达式(用逗号分隔)。
下面的实例定义一个初始值为 i=1 的循环。只要变量 i 小于或者等于 5,循环将继续运行。循环每运行一次,变量 i 就会递增 1:
<?php
for ($i=1; $i<=5; $i++)
{
echo "数字为 " . $i . PHP_EOL;
}
?>
输出:
数字为 1 数字为 2 数字为 3 数字为 4 数字为 5
foreach 循环
foreach 循环用于遍历数组。
语法:
foreach ($array as $value) { 要执行代码; }
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。
foreach ($array as $key => $value) { 要执行代码; }
每一次循环,当前数组元素的键与值就都会被赋值给 $key 和 $value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值。
下面的实例演示了一个输出给定数组的值的循环:
<?php
$x=array("Google","Runoob","Taobao");
foreach ($x as $value)
{
echo $value . PHP_EOL;
}
?>
输出:
Google Runoob Taobao
下面的实例演示了一个输出给定数组键与值的循环:
<?php
$x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao");
foreach ($x as $key => $value)
{
echo "key 为 " . $key . ",对应的 value 为 ". $value . PHP_EOL;
}
?>
输出:
key 为 1,对应的 value 为 Google key 为 2,对应的 value 为 Runoob key 为 3,对应的 value 为 Taobao
PHP 函数
PHP 的真正威力源自于它的函数。
在 PHP 中,提供了超过 1000 个内建的函数。
PHP 内建函数
如需查看所有数组函数的完整参考手册和实例,请访问我们的 PHP 参考手册。
PHP 函数
在本章中,我们将为您讲解如何创建自己的函数。
如要在页面加载时执行脚本,您可以把它放到函数里。
函数是通过调用函数来执行的。
你可以在页面的任何位置调用函数。
创建 PHP 函数
函数是通过调用函数来执行的。
<?php
function functionName()
{
// 要执行的代码
}
?>
PHP 函数准则:
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头(不能以数字开头)
一个简单的函数,在其被调用时能输出我的名称:
<?php
function writeName()
{
echo "Kai Jim Refsnes";
}
echo "My name is ";
writeName();
?>
输出:
My name is Kai Jim Refsnes
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");
?>
输出:
My name is Kai Jim Refsnes. My sister's name is Hege Refsnes. My brother's name is Stale Refsnes.
下面的函数有两个参数:
<?php
function writeName($fname,$punctuation)
{
echo $fname . " Refsnes" . $punctuation . "<br>";
}
echo "My name is ";
writeName("Kai Jim",".");
echo "My sister's name is ";
writeName("Hege","!");
echo "My brother's name is ";
writeName("Ståle","?");
?>
输出:
My name is Kai Jim Refsnes. My sister's name is Hege Refsnes! My brother's name is Ståle Refsnes?
PHP 函数 - 返回值
如需让函数返回一个值,请使用 return 语句。
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = " . add(1,16);
?>
输出:
1 + 16 = 17