前言
这篇笔记整理 PHP 基础中的三块内容:常量、字符串和运算符,都是日常写代码频繁用到的知识点,适合刚入门的同学查漏补缺。
常量
定义常量
常量一旦定义就不能被修改或取消定义。PHP 提供两种定义方式:
// 方式一:define() 函数
define('APP_NAME', 'MyBlog');
echo APP_NAME;
// 方式二:const 关键字(PHP 5.3+)
const APP_VERSION = '1..';
echo APP_VERSION;
define 与 const 的区别
define()可以在运行时条件判断里使用,const必须写在文件顶层或类中define()的常量名可以用变量拼接,const不行- 类内只能用
const定义类常量
class Config
{
const HOST = 'localhost';
}
echo Config::HOST;
判断常量是否存在
if (defined('APP_NAME')) {
echo '常量已定义';
}
字符串
单引号与双引号
$name = 'Tom';
// 单引号:不解析变量,速度快
echo 'Hello, $name'; // 输出:Hello, $name
// 双引号:解析变量和转义字符
echo "Hello, $name"; // 输出:Hello, Tom
常用字符串函数
strlen('hello'); // 长度:5
mb_strlen('你好'); // 多字节长度:2
substr('abcdef', 1, 3); // 截取:bcd
str_replace('a', 'b', 'abc'); // 替换:bbc
trim(' abc '); // 去除首尾空格
explode(',', 'a,b,c'); // 拆分成数组
implode('-', ['a', 'b']); // 数组拼接:a-b
strtoupper('abc'); // 转大写:ABC
strpos('hello', 'l'); // 查找位置:2(找不到返回 false)
sprintf('姓名:%s,年龄:%d', 'Tom', 18); // 格式化
字符串拼接
PHP 用点号 . 拼接字符串,这一点和很多语言不同:
$first = 'Hello';
$second = 'World';
echo $first . ' ' . $second; // Hello World
运算符
算术运算符
$a = 10;
$b = 3;
echo $a + $b; // 13
echo $a - $b; // 7
echo $a * $b; // 30
echo $a / $b; // 3.333...
echo $a % $b; // 1(取模)
echo $a ** $b; // 100(PHP 5.6+ 幂运算)
赋值运算符
$a = 5;
$a += 3; // 等价 $a = $a + 3
$a .= '!'; // 等价 $a = $a . '!',字符串拼接赋值
比较运算符
10 == '10'; // true,值相等即可(松散比较)
10 === '10'; // false,类型也要相同(严格比较)
10 != '9'; // true
10 !== '10'; // true,类型不同
10 <=> 5; // 1(太空船运算符,PHP 7+)
实践建议:判断相等时尽量用 ===,避免 PHP 松散比较带来的隐式类型转换坑,比如 == 'abc' 在 PHP 7 中返回 true。
逻辑运算符
$a = true;
$b = false;
var_dump($a && $b); // false
var_dump($a || $b); // true
var_dump(!$a); // false
var_dump($a and $b); // 与 && 相同,但优先级更低,慎用
三元运算符与合并运算符
$age = 18;
// 三元运算符
echo $age >= 18 ? '成年' : '未成年';
// null 合并运算符(PHP 7+),比 isset 三元写法简洁
$page = $_GET['page'] ?? 1;
小结
- 常量用
define()或const定义,类内只能用const - 单引号不解析变量,双引号解析变量,拼接用
. - 比较时优先用
===和!==避免类型转换的坑 - PHP 7 的
??运算符能让取默认值的代码更简洁
掌握这些基础后,就可以继续学习流程控制和数组操作了。