PHP 变量与常量

引言

在之前的入门篇教程中,我们已经见识了如何搭建 PHP 本地开发环境,选择一款适合自己的 PHP 代码编辑器,并编写了一个最简单的 PHP 程序,以及在 HTML 中嵌入 PHP 脚本,算是熟悉了 PHP 代码的基本开发和运行流程。

从今天开始,我们将花几个篇幅的教程快速过一下 PHP 基本语法,包括变量、常量、基本数据类型、数组(索引数组和关联数组)、函数(自定义函数、匿名函数、PHP 常用内置函数库)、请求数据处理(包含 Cookie 和 Session)、数据库操作等,所有这些基于函数式编程进行演示。

变量

变量声明和初始化

首先来看变量。回顾下我们在第一个 PHP 程序中编写的代码:

<?php

echo "你好,学院君!";

这里我们打印的字符串实际上是以字面量(literal)的方式定义的,我们还可以通过变量的方式先声明并初始化,再引用。在 php_learning 项目目录下创建 basic 子目录,用于存放 PHP 基本语法教程代码,这里我们先创建一个 var.php,并初始化代码如下:

-w810

我们通过 $greeting 来声明这个欢迎字符串变量,并将其初始化为 你好,PHP!,这里需要注意的是 PHP 是弱类型语言,变量类型在运行时确定,所以不需要声明数据类型,另外,PHP 变量的声明和初始化是一步完成的,不需要也不支持单独的声明语句。

声明为变量的好处是一次声明,多次使用,后续再要打印 你好,PHP!,只需要引用 $greeting 这个变量即可:

<?php

$greeting = "你好,PHP!";
echo $greeting . PHP_EOL;

printf("%s\n", $greeting);

其中 PHP_EOL 是 PHP 内置的跨平台换行符常量,PHP 中字符串连接通过 . 完成,所以我们在待打印字符串之后通过 . 连接 PHP_EOL 表示紧随其后进行换行。printf 是 PHP 内置的格式化输出字符串函数,%s 表示以字符串形式输出变量,在命令行运行上述代码,输出如下:

-w492

运行时修改变量值

使用变量的另一个好处是,我们可以在运行期间对变量值进行修改:

<?php

$greeting = "你好,PHP!";
echo $greeting . PHP_EOL;
printf("%s\n", $greeting);

$greeting = "你好,学院君!";
echo $greeting;

输出如下:

-w547

变量名规则

关于 PHP 变量的基本使用就是这些,非常简单,下面我们来介绍下变量名格式要求,当我们声明一个 PHP 变量的时候,需要符合以下要求:

  • $ 开头(坊间戏言,PHP 程序员是有多穷,才要求变量名以货币符号开头😂);
  • $ 之后具体的变量名只支持字母(支持中文字符,不过我们尽量使用 ASCII 字符,以免出现意想不到的问题)、数字、下划线,并且不能以数字开头;

由于 PHP 变量名都以 $ 作为前缀,所以支持将系统关键字和保留字作为变量名。

我们来看一些变量名格式的示例,前面四个满足要求,是合法变名,后面三个不满足要求,PhpStorm 会进行报错提示,执行时也会报错:

-w569

另外,PHP 变量名大小写敏感,变量名一致,大小写不一致,会被看作不同的变量:

<?php

$greeting = "你好,PHP!";
$Greeting = "你好,学院君!";
echo $greeting . PHP_EOL;
echo $Greeting . PHP_EOL;

以上代码的打印结果是:

你好,PHP!
你好,学院君!

可变变量

PHP 作为动态弱类型语言,变量声明和使用非常灵活,除了不指定类型的声明和初始化之外,还可以在变量名中引用变量,从而实现可变变量的功能,具体的实现也非常简单,就是在变量名前再加上一个 $ 前缀,将对应变量值作为一个变量名进行引用。

我们来编写一段示例代码进行演示:

<?php 

$greeting = "你好,PHP!";
$varName = "greeting";
echo $$varName;

上述代码的执行结果是:

你好,PHP!

因为 $varName 的变量值是 greeting,所以当我们调用 $$varName 时,$varName 被替换成 greeting,因此实际上引用的是 $greeting,由于 $varName 的值可以动态设置,所以也就可以实现了一个可变变量。

常量

常量与变量相对,变量可以在运行期间修改,而常量一经定义就不能进行变更,因此常量存在的意义就是设置运行期「只读变量」,保护「这些变量」运行期间不被更改。

通过 define 函数设置

在 PHP 中定义常量有两种方式,一种是遵循 C 语言的宏定义语法,通过 define 函数设置,我们在 php_learning/basic 目录下新增 const.php,通过 define 函数设置常量:

<?php

define("LANGUAGE", "PHP");
define("AUTHOR", "学院君");

echo LANGUAGE . ": " . AUTHOR . PHP_EOL;

在上述代码中设置了两个常量,LANGUAGEAUTHOR,常量名不需要 $ 前缀(也不能设置),并且为了和变量做区分,通常都是以大写字母进行命名(同样大小写敏感),此外,常量名的命名规则除了不需要 $ 前缀之外,其他和变量名一样,只支持字母、数字、下划线,并且不能以数字开头。

如果我们试图在常量设置之后进行修改会报解析错误:

-w550

此外,通过 define 定义的常量全局有效,所以通常在项目初始化期间通过这种方式定义全局常量。

通过 const 修饰符设置

另外,PHP 还支持以 const 修饰符的方式定义常量,这种定义方式通常用于在类中设置只读属性(类常量),不过也可以在 PHP 文件中使用:

<?php

define("LANGUAGE", "PHP");
define("AUTHOR", "学院君");

const FRAMEWORK = "Laravel";
echo LANGUAGE. '-' . FRAMEWORK . '-' . AUTHOR . PHP_EOL;

使用 const 修饰符定义的常量命名规则和 define 完全一致,并且不能定义已经在 define 中声明过的常量,具体细节不再重复介绍,上述代码的执行结果是:

PHP-Laravel-学院君

关于 PHP 中的变量和常量我们就简单介绍到这里,到目前为止,我们所有的示例代码都是围绕字符串展开的,下一篇教程,我们来介绍 PHP 中的其他基本数据类型及其使用。

上一篇: 在 HTML 中嵌入 PHP 代码

下一篇: PHP 基本数据类型