摘要訊息 : 學習 PHP 的基本語法和規範.
0. 前言
对于 PHP 的课堂, 和 Swift 课堂一样, 也是总共 10 个课时, 讲完 PHP 的基本语法, 中间会参杂一些比较高级的语法, 有能力者可以学习. PHP 课堂默认你有一定的计算机语言基础.
本文于 2022 年 3 月 17 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.
1. PHP 标识符
因为 PHP 可以嵌入在 JavaScript、HTML 等语言中, 所以标识符就变得非常重要. 因为要让编译器知道, 这段代码不是 HTML 而是 PHP :
<?php
// ...
?>
这种是最常用的标识符, 也推荐大家使用这一种 PHP 标识符, 结尾的 ?>
可以省略掉.
无标识符风格并不推荐大家使用, 因为没有明确标识具体的语言, 因此可能和其它程式设计语言发生冲突 :
<?
// ...
?>
当然, 还有 Script 风格和 ASP 风格 :
<script language="php">
// ...
</script>
<%
// ...
%>
2. 编码规范
和 Swift 不同的是, PHP每一句结束都需要 ;
作为结尾, 告诉解释器结束这一句代码 :
<?php
echo "Hello, PHP!";
?>
在一段 PHP 代码结束标记中, 隐含了一个分号, 所以 PHP 代码段中最后一行可以不需要分号 :
<?php echo "Hello, PHP!" ?>
PHP 提供了 3 种注释风格 :
//
: 单行注释;#
: 单行注释, 这个是 Shell 风格的;/* */
: 多行注释.
3. 常量
PHP 通过 define()
命令来定义一个常量 :
<?php
define("常量名", 常量值);
?>
其中常量值可以是字符串. 在 PHP 7 中, 增加了可以通过 define()
命令来定义一个常量数组.
当然, PHP 中会有一些内置的常量 :
_FILE_
: 获得文件完整的路径和文件名;_LINE_
: 获得 PHP 程序的行数;PHP_VERSION
: 获得 PHP 的版本;PHP_OS
: 获得 PHP 解析器的操作系统名称;TRUE
: 真;FALSE
: 假;E_ERROR
: 指到最近的错误处;E_WARNING
: 指到最近的警告处;E_PARSE
: 指到解析语法有潜在问题处;E_NOTICE
: 指到发生不寻常但不一定是错误处 (例如 : 存取一个不存在的变量);_DIR_
: 获得文件所在的目录;_FUNCTION_
: 函数的名称;_CLASS_
: 类的名称.
4. 变量
不像 C++ 或者 Java, PHP 中的变量声明非常简单, 一般在变量名称前面加一个 $
即可, 可以以大小写 "a-z"、"0-9"、"_". 但是变量不可以以 数字 开头, 并且其中也不允许存在非法字符. 这种命名方式最大的优势就在于可以命名已经保留的关键字, 例如 array
, if
和 for
等等 :
<?php
$array = array(1, 2, 3);
print_r($array);
/* 结果 :
Array(
[0] => 1
[1] => 2
[2] => 3
)
*/
$if = 6;
echo $if; // 结果 : 6
?>
在变量前面增加 &
符号就代表引用, 两个变量会指向内存中的一个存储空间 :
<?php
$a = 1;
$b = &$a;
$b = 2;
echo $a; // 结果 : 2
?>
有一种特殊的变量叫作可变变量 :
<?php
$a = "admin";
$$a = "guest";
echo $admin;
echo "\n";
echo $a;
/* 结果 :
guest
admin
*/
?>
仔细解读这一段代码其实和变量的传递有点类似 : 首先创建了一个 $a
的变量, 之后再次 $$a
就相当于 $admin
. 这相当于可以在 PHP 程式码运作的时候创建一个新的变数.
全局变量可以在函数之外任意位置都可以访问 :
<?php
$a = 20;
function show_a() {
echo $a;
}
//show_a(); // 报错
echo $a; // 结果 : 20
?>
超全局变量的特点可以从名字去解读, 就是任何位置都可以访问到这个变量. PHP 内置的超全局变量有 :
$GLOBALS
: 包含全局变量的数组;$_GET
: 包含所有通过 GET 方法传递变量的数组;$_POST
: 包含所有通过 POST 方法传递变量的数组;$_FILES
: 包含文件上传变量的数组;$_COOKIE
: 包含 Cookie 变量的数组;$_SERVER
: 包含服务器变量环境的数组;$_ENV
: 包含环境变量的数组;$_REQUEST
: 包含用户所有输入内容的数组 (包括了$_GET
,$_POST
和$_COOKIE
);$_SESSION
: 包含了会话变量的数组;
如果想要在函数内访问函数外的变量, 可以通过 global
关键字或者 $GLOBALS
数组 :
<?php
$a = 20;
function show_a() {
global $a; // 等价于 $a = $GLOBALS["a"];
echo $a;
}
show_a();
echo "\n";
echo $a;
/* 结果 :
20
20
*/
?>
静态变量只有函数内可以访问, 它的初始化只在被第一次访问的时候, 它的状态会一直被保留到程式结束 :
<?php
function print() {
static $a = 0;
++$a;
print($a);
}
print();
echo "\n";
print();
/* 结果 :
0
1
*/
?>
PHP 中可以通过 unset()
函数来销毁垃圾变量.
5. 数据类型
- 整数型 :
Int
; - 浮点型 :
Float
与Double
; - 字符串型 :
String
; - 数组型 :
Array
; - 对象型 :
Object
; NULL
型;- 布尔型 :
Bool
,- 整数型 : 为
0
时, 布尔属性为False
; 非0
时, 布尔属性为True
; - 浮点型 : 为
0.0
时, 布尔属性为False
; 非0
时, 布尔属性为True
; - 字符串型 : 为
""
或者"0"
时, 布尔属性为False
; 否则, 布尔属性为True
; - 数组型 : 不含任何元素的数组, 布尔属性为
False
; 否则, 布尔属性为True
; NULL
型 : 布尔属性永远为False
;
- 整数型 : 为
- 接口类 :
Interfaces
; - 资源 (Resource) 类型.
因为 PHP 语言为动态类型语言, 所以上述不再深入.
6. 数据类型转换
可以直接在变量前表明数据类型进行数据转换 :
<?php
$a = 2.2;
$a = (int)$a;
echo $a; // 结果 : 2
?>
PHP 内建的 settype
函数也可以用于数据转换. 它的回传值为 Bool
型别, 用于表明转换的成功和失败; 它接受两个参数, 第一个是要转换的变数, 第二个是要转换的类型, 第二个参数是一个字串 :
<?php
$a = 2.2;
$cast_result = settype($a, "int");
echo $a; // 结果 : 2
echo $cast_result; // 结果 : True
?>
自創文章, 原著 : Jonny. 如若閣下需要轉發, 在已經授權的情況下請註明本文出處 :