PHP 语言基础

1. PHP 标记

PHP 文件的默认扩展名为 .php,在 PHP 文件中通常包含 HTML 标签和一些 PHP 脚本代码。我们可以将 PHP 脚本放在文档的任何位置,但为了与 HTML 元素区分开,需要使用一些特殊的标记来进行区分。

1.1 标准风格

将 PHP 脚本用 <?php ?> 的标记包含起来:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>第一个 PHP 页面</title>
</head>
<body>
	<h1>第一个 PHP 页面</h1>
	<?php
		echo "hello world...";
	?>
</body>
</html>

标准风格的标记是推荐使用的标记,在 HTML、XHTML、XML 中都可以使用。

echo 主要用于输出内容,向页面输出时,可包含 HTML 标签。

1.2 脚本风格

使用 <script language="php"></script> 标记:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>第一个 PHP 页面</title>
</head>
<body>
	<h1>第一个 PHP 页面</h1>
	<script language="php">
		echo "这是脚本风格...";
	</script>
</body>
</html>

1.3 简短风格

使用 <? ?> 标记:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>第一个 PHP 页面</title>
</head>
<body>
	<h1>第一个 PHP 页面</h1>
	<? echo "这是简短风格..."; ?>
</body>
</html>

1.4 asp 风格

使用 <% %> 标记:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>第一个 PHP 页面</title>
</head>
<body>
	<h1>第一个 PHP 页面</h1>
	<%
		echo "这是 asp 风格...";
	%>
</body>
</html>

注意,要使用简短风格和 asp 风格,还需要到 php.ini 文件中进行配置,将 short_open_tag、asp_tags 设置为 ON,再重新服务器,但还是推荐标准风格。

2. 注释

注释,即解释说明,主要用于说明代码的编写者、编写时间、逻辑、用意等,方便代码阅读者进行阅读。注释不会影响程序的正常执行,在执行过程中,注释内容会被忽略。

PHP 中可以使用的注释有三种:

  1. //:单行注释,注释范围从 // 开始,到行尾结束
  2. /* /:多行注释,以 / 开头,*/ 结束,包含在开始与结束标记之间的内容为注释内容
  3. #:shell注释,类似于单行注释

注意,多行注释不能出现嵌套使用,单行注释中也不要出现 ?> 这样的标记,解释器会误以为 PHP 脚本结束了。

3. 标识符与关键字

标识符通常是我们自己定义如变量名、类名、方法名时用到的标记。关键字是 PHP 语言本身特有的有特殊含义的单词标记,通过这些有特殊含义的单词组织 PHP 的程序逻辑。

自定义标识符名时,通常遵循以下规则:

  • 可以包含字母、数字、下划线
  • 不能以数字开头
  • 区分字母大小写
  • 不能使用关键字

4. 变量

变量是在内存中数据存储的区域,与其它语言一样,变量也具有三大要素:变量数据类型、变量名与变量值。

4.1 变量定义

PHP 中变量命名规则为:

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

PHP 和 JavaScript 类似,也是一门弱类型的语言,即在定义变量时不需要指明变量数据类型,变量的类型在赋值时自动确定。这也是弱类型语言与强类型语言的差别。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>第一个 PHP 页面</title>
</head>
<body>
	<h1>第一个 PHP 页面</h1>
	<?php
		$txt="Hello world!";
		$x=5;
		$y=10.5;

		echo "x = $x, y = $y, txt = $txt";
	?>
</body>
</html>

4.2 变量作用域

变量必须在有效范围内使用,如果变量超出其有效范围,也就推动了变量的意义。变量作用域如下:

作用域 描述
局部变量 在函数内部定义的变量,其作用域在所在函数内部
全局变量 定义在所有函数外的变量,其作用域是整个 PHP 文件,但在用户自定义函数内部是不可用的。
如果希望在用户自定义函数内部使用到全局变量,则要使用 global 关键字声明全局变量
静态变量 能够在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续使用原来的值。
而一般变量是在函数调用结束后,其存储的数据值即被清除,所占的内存空间也被释放。
使用静态变量时,先要用关键字 static 来声明变量,把关键字 static 放在要定义的变量之前

局部变量与全局变量:

1
2
3
4
5
6
7
8
9
10
11
12
$test = "函数外部的 test 变量...";

function fn() {
	$test = "fn 函数内部的 test 变量...";
	echo "fn函数内部输出:$test<br>";
	global $test;
	$test = "修改了外部的 test 变量...";
	echo "fn函数内部输出:$test<br>";
}

fn();
echo "函数外部输出:$test<br>";

执行结果:

1
2
3
fn函数内部输出fn 函数内部的 test 变量...
fn函数内部输出修改了外部的 test 变量...
函数外部输出修改了外部的 test 变量...

局部变量与静态变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function fn1(){
	static $num = 0;
	$num += 1;
	echo "fn1 : num = $num ";
}

function fn2(){
	$num = 0;
	$num += 1;
	echo "fn2 : num = $num ";
}

for($i = 0; $i < 5; $i++) {
	fn1();
}
echo "<br>";
for($i = 0; $i < 5; $i++) {
	fn2();
}

执行结果:

1
2
fn1 : num = 1 fn1 : num = 2 fn1 : num = 3 fn1 : num = 4 fn1 : num = 5 
fn2 : num = 1 fn2 : num = 1 fn2 : num = 1 fn2 : num = 1 fn2 : num = 1

5. 数据类型

PHP 支持 8 种数据类型,这 8 种数据类型又可分为标量类型、复合类型与特殊类型。

  • 标量类型:boolean、integer、float、string
  • 复合类型:array、object
  • 特殊类型:resource、null

5.1 标量类型

类型 描述
boolean 布尔类型,取值为 true 或 false
integer 整数,可以是正数或负数
float 浮点型,用于存储数字,它有小数位
string 字符串,存储连续的字符序列

boolean

boolean 布尔型通常用于表示真假,它有两个取值:true、false,是 PHP 中常用的类型之一。boolean 类型通常用在条件结构或循环结构的条件表达式中。

在某些情况下,其它类型也可以自动向 boolean 类型转换,通常这些会转为 boolean 型的 false:0、0.0、”0”、”“(空字符串)、未赋值的数组……

integer

integer 为整型类型,只能表示整数,可以是十进制、八进制、十六进制。八进制以 0 开头,十六进制以 0x 开头。32 位操作系统中,integer 表示数字在 -2^31 至 2^31 - 1 范围内。在为变量赋值时,如果赋值数字超过整数的范围(称为溢出),将会被当作 float 浮点型数据处理。

float

float 为浮点数类型,既可用于存放整数,又可用于存放小数。在 32 位操作系统中,float 表示数字在 1.7E-308 至 1.7E+308 范围内。 浮点数写法可以有两种,平时常用的是如 3.14 之类的写法,也可使用如 7.96E+5 的写法(科学计数法)。PHP 4.0 之前,浮点型为 double(双精度浮点数),两者之间没有区别。

string

在 PHP 中,有三种表示字符串的方式,分别是使用单引号(’)、双引号(”)或界定符(«<)来表示。

单引号(’)与双引号(”)的区别在于,单引号中如果包含变量会按普通字符串输出,而双引号中如果包含变量会自动替换成变量实际值输出。

界定符是从 PHP 4.0 开始支持的,使用时在界定符后跟一个标识符,然后是字符串内容,字符串内容结束后要以同样的标识符标记,如:

1
2
3
echo <<<str
	这是一个字符串内容
str;

«< 后跟的 str 就是标识符,结束标识符必须另起一行,并且不允许有空格,也不允许在其前后有任何空格或其它符号。

5.2 复合类型

类型 描述
array 一组类型相同的值的集合
object 类的实例,通常使用 new 创建

array

数组是一组数据的集合。通过数组,可以将一系列数据组织起来,形成一个可操作的整体。

数组中的每个数据称为一个元素,元素通常包括索引和值两个部分,索引可为数字或字符串,值可以取多种数据类型。

定义数组的语法为:

1
2
3
$arr = (value1, value2, value3, ...); // 或
$arr[key] = value; // 或
$arr = array(key1=>value1, key2=>value2, ...);

key 为数组元素的索引,value 是数组元素值。声明数组后,数组中元素个数也可以动态改变,数组长度也会自动更新。

object

对象类型稍后介绍。

5.3 特殊类型

类型 描述
resource 资源也称句柄,保存的是到外部资源的一个引用,是通过专门的函数来建立和使用的
null 一个特殊的值,表示变量没有值,唯一值为null,通常用于表示对象的空

5.4 数据类型转换

PHP 的数据类型转换是在待转换的变量前加上小括号的方式来转换,如:

1
2
3
$num = 5;
$b = (boolean)$num;
echo $num;

注意,转换为 boolean 类型时,null、0、未赋值的变量或数组被转换为 false,其它的转换为 true;转换成整型时,布尔型的 false 转换为 0,true 转换为 1,浮点型的小数部分被丢弃,字符串型如果以数字开头就截取到非数字位,否则输出 0。

也可以使用 settype() 函数来转换:

1
boolean settype(mixed var, string type)

var 为待转换的变量,type 为转换的数据类型,如果转换成功,settype() 返回 true,否则返回 false。

如:

1
2
3
4
$str = "8899.283";
$b = settype($str, "integer");
$num = $str*2;
echo $num;

使用类似 (boolean)、(integer) 的方式转换,原变量的值不会发生改变,但使用 settype() 函数转换后,原变量会被改变为转换后的值。

5.5 类型检测

PHP 内置了用于检测数据类型的函数:

函数 描述
is_boolean 检测是否为 boolean 类型
is_string 检测是否为 string 类型
is_float/is_double 检测是否为 float 类型
is_integer/is_int 检测是否为 integer 类型
is_null 检测是否为 null
is_array 检测是否为 array 类型
is_object 检测是否为 object 类型
is_numeric 检测是否为数字或由数字组成的字符串

6. 常量

常量是一个简单值的标识符,常量值被定义后,在脚本的其他任何地方都不能被改变。一个常量名由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。

设置常量需要使用到 define() 函数:

1
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

参数 name 为必选参数,表示常量名称,即标识符。value 也为必选参数,表示常量的值。case_insensitive 是可选参数,如果设置为 true,该常量则大小写不敏感,该参数默认是大小写敏感的。

1
2
3
4
5
6
7
8
// 区分大小写的常量名
define("GREETING", "欢迎访问小明的家");
echo GREETING;    // 输出 "欢迎访问小明的家"
echo '<br>';
echo greeting;   // 输出 "greeting"
// 不区分大小写的常量名
define("WELCOME", "欢迎访问小明的家", true);
echo welcome;  // 输出 "欢迎访问小明的家"

常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。以下实例演示了在函数内使用常量,即便常量定义在函数外也可以正常使用常量:

1
2
3
4
5
6
7
define("GREETING", "欢迎访问小明的家");

function myTest() {
	echo GREETING;
}

myTest();    // 输出 "欢迎访问小明的家"

7. 运算符

PHP 中的运算符和其它语言也是类似的。

算术运算符

主要用于处理算术运算,在数字的处理中应用最多。有 +(加)、-(减)、*(乘)、/(除)、%(模)、++(自增)、–(自减) 运算。

字符串运算符

字符串运算符只有一个,即英文半角状态下的小圆点(.),它的作用是将两个字符串连接起来,形成一个新的字符串,其它语言中多用 “+” 作字符串连接,但在 PHP 中 “+” 只用于算术运算。

赋值运算符

=,用于将运算符右边的表达式值赋值给左边的变量保存。

复合运算符

+=、-=、*=、/=、%=、.=,作用是将运算符左边的变量与右边的表达式作第一个运算符号的运算操作,将运算结果保存回左边的变量中。

比较运算符

主要用于大小比较,有:>、<、>=、<=、==、===、!=、!==。== 与 === 号是相等比较,前者是比较值相同即可,如果类型不一致,尝试类型转换后再比较,而后者是恒等比较,即类型不一致,直接不相等。

逻辑运算符

&& 或 and,表示逻辑与,两个表达式都为真时结果为真。

|| 或 or,表示逻辑或,两个表达式只要有一个为真,结果为真。

xor,表示逻辑异或,两个表达式一真一假时,结果为真。

!,表示逻辑非,取逻辑相反值。

三目运算符

?:,作用是根据一个表达式在另两个表达式中选择一个。? 问题前为条件的表达式,? 问题与 : 冒号之间是条件为真时返回的表达式,而 : 冒号后是条件为假时返回的表达式。

位运算符

位运算符主要用于对二进制数按位进行运算,& 表示按位与,| 表示按位或,^ 表示按位异或,~ 表示按位取反,« 表示向左移位,» 表示向右移位。实际开发中,除非涉及算法优化,否则还是很少用到位运算符。

错误控制运算符

错误控制运算符可以对程序中出现错误的表达式进行操作,进而对错误信息进行屏蔽,使用方法是在可能出现错误的表达式前添加 @ 符号。@ 仅仅是对错误信息进行屏蔽,不会真正解决错误问题,不推荐使用。

这些运算符如果结合到一起使用,同样存在优先级的问题,但是这么多运算符,我们要去一一的记优先级的话,也显得很繁琐,所以实际应用的时候,如果不清楚优先级的情况,可适当使用括号来区分。

8. 函数

实际开发中,会经常遇到重复的操作,如数据添加、修改、查询、字符串操作等,如果每个操作都重复去编写代码,不仅写起来很头痛,如果后期代码要维护、修改,那就会更头痛了。我们可以使用函数来解决这个问题,函数就是可以被重复使用的代码块

8.1 函数定义与调用

创建函数的语法结构为:

1
2
3
function fn_name($var1, $var2, ...) {
	// main_body;
}

function 是声明函数的关键字,fn_name 为函数名,$var1, $var2, … 为函数形式参数列表,main_body 为函数主体,实现功能的代码块就写在主体中。

函数定义之后,不会主动起作用,需要经过调用才能发挥作用。函数调用与其它语言类似,通过函数名引用,并传递正确的实际参数即可。

1
2
3
4
5
function area($width, $height) {
	echo "矩形宽为:$width ,高为:$height ,面积为:" . $width * $height;
}

area(3, 5);

结果:

1
矩形宽为5 高为8 面积为40

8.2 函数参数

在函数体内部进行运算时,所需要的数据如果函数内不能解决数据来源问题,或不能通过全局变量解决时,所需要的额外数据就可以通过参数传递。函数定义时给定的参数列表称为形式参数列表,简称形参;函数调用时给定的参数列表称为实际参数列表,简称实参。

在 PHP 中,参数的传递的方式有:按值传递,按引用传递,默认参数。

1. 按值传递

将实参的值赋值到对应的形参变量中,在函数内部的操作仅针对形参变量进行,操作结果不会影响到实参,这种参数传递是按值传递。如:

1
2
3
4
5
6
7
8
9
10
11
function area($width, $height) {
	echo "矩形宽为:$width ,高为:$height ,面积为:" . $width * $height;
	// 运算后修改形参值
	$width += 5;
	$height += 3;
}

$w = 5;
$h = 8;
area($w, $h);
echo "<br>函数调用结束后:\$w = $w\$h = $h";

执行结果:

1
2
矩形宽为5 高为8 面积为40
函数调用结束后$w = 5 $h = 8

2. 按引用传递

按引用传递就是将实参的内存地址传递给形参,这样,在函数体内部所有对形参的操作都会影响到实参的值。引用传递是在函数定义时就在形参前添加 “&” 符号,调用时直接传递实参变量即可。

1
2
3
4
5
6
7
8
9
10
11
function area(&$width, &$height) {
	echo "矩形宽为:$width ,高为:$height ,面积为:" . $width * $height ;
	// 运算后修改形参值
	$width += 5;
	$height += 3;
}

$w = 5;
$h = 8;
area($w, $h);
echo "<br>函数调用结束后:\$w = $w\$h = $h";

执行结果:

1
2
矩形宽为5 高为8 面积为40
函数调用结束后$w = 10 $h = 11

3. 默认参数

默认参数也叫可选参数,即在函数调用时,参数可以不传递,在函数体内部对未传递的参数取一个默认值。在函数声明时可以指定某个参数为可选参数,将可选参数放在参数列表末尾,并为其指定默认值。

1
2
3
4
5
6
7
function area($radius, $pi=3.14) {
	echo "半径为 $radius 的圆面积为:" . $pi * $radius * $radius . "<br>";
}

area(2);

area(2, 3.14159);

执行结果:

1
2
半径为 2 的圆面积为12.56
半径为 2 的圆面积为12.56636

8.3 返回值

如果需要在函数外部使用到函数体中数据处理的结果,则需要使用返回值。PHP 使用 return 语句来将返回值传递给调用者。

return 的作用是将函数的值返回给函数的调用者,即将程序控制权返回到调用者的作用域,所以函数体内执行了 return 语句,则结束了函数的调用。如果在全局作用域内使用了 return 语句,那么将终止脚本的执行。

1
2
3
4
5
6
function calc($salary, $tax=0.03, $minus=0){
	return $salary - (($salary - 3500) * $tax - $minus);
}

$income = calc(5000);
echo "月工资 5000,到手:$income";

执行结果:

1
月工资 5000到手4955

9. 小结

以上主要简单介绍了 PHP 语言的基础知识,当然对于初学者来说,这些内容并不十分详实,适合有一定编程基础的读者阅读。待时间允许再做详细整理…


您的支持是我的动力。您可以通过以下方式支持我:

  • 关注我的 Github  关注我的 Github
  • 打赏
    微信 支付宝
    微信支付二维码 支付宝二维码
  • 关注我的微信公众号
    微信公众号
  • 文章标题: PHP 语言基础
  • 文章字数: 745
  • 本文作者: isaac
  • 发布时间: 2016年12月11日
  • 最后更新: 2016年12月11日
  • 原始链接: http://itrain.top/2016/12/php_basics/

本文遵守 Attribution-NonCommercial 4.0 International 许可协议。 转载请注明出处!