2、PHP基础语法:标记风格、注释、变量与常量、数据类型
好,咱们正式开始写PHP代码了。这一章是地基中的地基,我建议你认真过一遍。很多新手觉得语法枯燥,但说实话,我见过太多线上bug,根源就是变量类型没搞明白。
2.1 PHP标记风格
PHP代码要跑起来,得先告诉服务器:「嘿,这里开始是PHP了」。这个「开关」就是标记。
标准标记(推荐)
<?php
echo "Hello, World!";
?>
这是最通用的写法,兼容性最好。我个人习惯一直用这个,不管在哪个服务器上都不会出问题。
短标记(不推荐)
<?
echo "Hi";
?>
短标记需要php.ini中开启short_open_tag。我曾经在一个客户的旧服务器上吃过亏——代码迁移过去,短标记全失效了,页面白花花一片。嗯,从那以后我再也不用短标记了。
2.2 注释
注释是写给程序员看的,不是给机器看的。好的注释能救命,坏的注释能坑人。
<?php
// 这是单行注释
/*
这是多行注释
可以写好几行
*/
# 这也是单行注释(Perl风格,不常用)
?>
我个人建议:代码逻辑复杂的地方写注释,但别写废话。比如 $i++; 旁边写「i加1」——这种注释删了吧,浪费时间。
2.3 变量
PHP的变量用$开头,不用声明类型,直接赋值就能用。这很灵活,但也容易埋坑。
<?php
$name = "小明";
$age = 25;
$price = 19.99;
$isStudent = true;
?>
变量命名规则:
- 以
$开头,后面跟字母或下划线 - 区分大小写(
$name和$Name是两个变量) - 不能以数字开头
2.4 常量
常量一旦定义,就不能再修改。适合存一些固定值,比如数据库密码、网站名称。
<?php
// 使用 define() 定义
define("SITE_NAME", "PHP学习网");
define("MAX_USERS", 1000);
// 使用 const 定义(PHP 5.3+)
const VERSION = "1.0.0";
echo SITE_NAME; // 输出:PHP学习网
?>
常量前面没有$符号,这是和变量最大的区别。我见过新手写 $SITE_NAME,结果报错半天找不到原因。
2.5 数据类型
PHP是弱类型语言,但底层还是有8种基本数据类型。咱们一个一个过。
2.5.1 整型(Integer)
<?php
$a = 123; // 十进制
$b = -456; // 负数
$c = 0x1A; // 十六进制(26)
$d = 0b1101; // 二进制(13)
?>
整型范围取决于系统,32位系统最大约21亿,64位系统大得多。我曾经在32位服务器上做计数器,结果数字超过21亿后直接变成负数——嗯,踩坑了才知道要改用字符串存大数字。
2.5.2 浮点型(Float)
<?php
$price = 19.99;
$big = 1.2e5; // 科学计数法,等于120000
?>
0.1 + 0.2 == 0.3 在PHP中可能是false。为什么?因为浮点数在计算机里是近似值。算钱的时候,请用整数(单位:分)或者用BCMath扩展。
2.5.3 字符串(String)
<?php
$str1 = '单引号字符串';
$str2 = "双引号字符串\n换行";
$str3 = <<<EOT
这是定界符字符串
可以写多行
EOT;
?>
单引号和双引号的区别:双引号会解析变量和转义字符,单引号不会。说白了,双引号更「聪明」但也更慢一点。我一般用单引号,除非需要解析变量。
2.5.4 布尔型(Boolean)
<?php
$isLogin = true;
$isAdmin = false;
?>
布尔值只有两个:true和false。但PHP里很多值也能当布尔用:
- 0、0.0、""、"0"、null、空数组 → 都算false
- 其他值 → 算true
这个特性很实用。比如 if ($count) 就能判断「有没有数据」,不用写 if ($count > 0)。简洁,但别滥用。
2.5.5 数组(Array)
<?php
// 索引数组
$colors = ["红", "绿", "蓝"];
echo $colors[0]; // 红
// 关联数组
$user = [
"name" => "张三",
"age" => 30
];
echo $user["name"]; // 张三
?>
数组是PHP的灵魂。我处理过的项目里,90%的数据都是用数组存的。关联数组特别方便,键名用字符串,一看就懂。
2.5.6 对象(Object)
<?php
class Person {
public $name;
function sayHello() {
echo "你好,我是" . $this->name;
}
}
$p = new Person();
$p->name = "李四";
$p->sayHello();
?>
对象是面向对象编程的基础。现在先有个印象,后面有专门章节讲。
2.5.7 NULL
<?php
$var = null;
$var2; // 未赋值,也是null
?>
NULL表示「没有值」。注意和空字符串""、数字0区分开。用 is_null() 或 === null 来判断。
2.5.8 资源(Resource)
<?php
$file = fopen("test.txt", "r"); // $file 就是资源类型
// 用完记得关闭
fclose($file);
?>
资源是外部资源的引用,比如文件句柄、数据库连接。你不需要直接操作它,但要知道用完要释放。我见过有人打开文件不关闭,结果服务器上文件句柄用光,所有请求都卡住了。
2.6 类型转换
PHP会自动转换类型,但有时候需要手动转:
<?php
$num = "123";
$intNum = (int)$num; // 强制转整型
$floatNum = (float)$num; // 强制转浮点型
$str = (string)456; // 强制转字符串
?>
好了,这一章的内容就这些。标记、注释、变量、常量、8种数据类型——都是最基础的东西。别觉得简单就跳过,基础不牢,后面写框架、做项目时会很痛苦。下一章咱们聊运算符和流程控制,到时候这些数据类型就派上用场了。