2. PHP基础语法:从第一行代码开始

好,咱们正式开始写PHP代码了。说实话,每次带新人,我都是从这一章讲起。基础语法就像盖房子的砖头,看着简单,但砌不好后面全得塌。我见过太多人因为分号漏了、引号错了,debug到怀疑人生。

别急,咱们一步步来。先搞定最基础的几个东西:标记、注释、输出、变量、常量、数据类型。这些你玩熟了,后面写项目就跟喝水一样自然。

2.1 PHP标记风格

PHP代码要跑起来,首先得告诉服务器:「嘿,这里开始是PHP了!」。这个「告诉」的动作,就是靠标记完成的。

最常用的就是标准标记:<?php ... ?>。我个人习惯一直用这个,兼容性最好,没有之一。

<?php
// 这里是PHP代码
echo "Hello, World!";
?>

还有一种短标记 <? ... ?>,但我不推荐你用。为什么?因为有些服务器没开启 short_open_tag 配置,代码直接白屏。我曾经在迁移项目时吃过这个亏,几十个文件挨个改,那叫一个酸爽。

注意: 纯PHP文件(没有HTML混写)建议省略结尾的 ?>。这样可以避免意外输出空白字符,很多框架都是这么干的。

2.2 PHP注释

注释是写给「人」看的,不是给机器看的。我见过两种极端:一种一行注释都不写,三个月后自己都看不懂;另一种每行都写注释,代码比注释还短。

PHP支持三种注释风格:

类型 写法 适用场景
单行注释 // 解释某一行代码的作用
多行注释 /* ... */ 大段说明或临时屏蔽代码
文档注释 /** ... */ 函数、类的说明,配合IDE自动提示
<?php
// 这是单行注释,我习惯用它做简单说明

/*
  这是多行注释
  可以写好几行
  适合临时注释掉一大段代码
*/

/**
 * 这是文档注释
 * @param string $name 用户名
 * @return string 问候语
 */
function sayHello($name) {
    return "你好," . $name;
}
?>
我的建议: 注释要写「为什么这么做」,而不是「做了什么」。代码本身就能说明「做了什么」,但「为什么」只有你知道。

2.3 PHP输出语句:echo 与 print

输出是调试的第一手段。PHP里最常用的就是 echoprint。说实话,我几乎只用 echo,因为它更快,而且能一次输出多个值。

<?php
echo "Hello";           // 输出字符串
echo "Hello", " ", "World"; // 输出多个值,用逗号分隔
print "Hello";          // print也能输出,但只能输出一个值
?>

你可能会问:echoprint 到底有啥区别?

  • echo 没有返回值,print 返回1(可以用在表达式中)
  • echo 可以输出多个参数,print 只能一个
  • echoprint 稍微快那么一丢丢

嗯,这里要注意:echo 后面可以不加括号,直接跟字符串。很多人写 echo("Hello"),其实 echo "Hello" 就够了。少打两个字符,多一分清爽。

2.4 变量与常量

变量就是装数据的盒子。PHP的变量用 $ 开头,这点跟其他语言不太一样。我第一次学的时候老忘加 $,结果报错报得我怀疑人生。

<?php
$name = "张三";   // 字符串
$age = 25;        // 整数
$price = 19.99;   // 浮点数
$isActive = true; // 布尔值
?>

变量命名规则其实很简单:

  • $ 开头,后面跟字母或下划线
  • 只能包含字母、数字、下划线,不能以数字开头
  • 区分大小写,$name$Name 是两个不同的变量
变量命名最佳实践: 我推荐使用驼峰命名法(camelCase)或下划线命名法(snake_case)。比如 $userName$user_name。选一种,然后整个项目保持一致。

常量跟变量不同,一旦定义就不能改。定义常量用 define()const 关键字。

<?php
define("SITE_NAME", "我的网站");
const VERSION = "1.0.0";

echo SITE_NAME; // 输出:我的网站
echo VERSION;   // 输出:1.0.0
?>

常量名通常全大写,用下划线分隔。这不是强制要求,但大家都这么写,你最好也这么干。我曾经接手过一个项目,常量名大小写混用,看得我脑壳疼。

小技巧: const 是语言结构,编译时更快;define() 是函数,可以在条件语句中使用。如果你确定常量不会变,用 const 就对了。

2.5 数据类型

PHP是弱类型语言,意思是你不必声明变量类型,PHP会自动判断。但这不代表你可以乱来。我见过有人把字符串当数字用,结果算出来的结果莫名其妙。

PHP支持8种基本数据类型:

类型 说明 示例
String(字符串) 一串字符 "Hello"
Integer(整型) 整数 42
Float(浮点型) 带小数点的数 3.14
Boolean(布尔型) true 或 false true
Array(数组) 一组数据 [1, 2, 3]
Object(对象) 类的实例 new stdClass()
NULL 没有值 null
Resource(资源) 外部资源(如数据库连接) fopen() 返回值

你可以用 var_dump() 来查看变量的类型和值,这是调试神器。

<?php
$name = "张三";
$age = 25;
$price = 19.99;
$isActive = true;

var_dump($name);    // 输出:string(6) "张三"
var_dump($age);     // 输出:int(25)
var_dump($price);   // 输出:float(19.99)
var_dump($isActive);// 输出:bool(true)
?>
避坑指南: 我曾经在比较两个值的时候用了 == 而不是 ===,结果 "1" == true 返回了 true,导致逻辑全乱套。记住:== 只比较值,=== 比较值和类型。能用 === 就别用 ==

说到类型转换,PHP有两种方式:自动转换和强制转换。

<?php
// 自动转换
$result = "5" + 3; // 输出 8,字符串"5"自动转成整数5

// 强制转换
$num = (int)"42";   // 字符串转整数
$str = (string)100; // 整数转字符串
$bool = (bool)1;    // 整数转布尔值
?>

自动转换虽然方便,但容易出问题。我建议你在关键地方用强制转换,明确告诉PHP你要什么类型。代码写清楚,bug少一半。

2.6 本章小结

好了,这一章的内容就这些。你想想看,其实PHP基础语法并不复杂:标记告诉服务器开始解析,注释帮你记住思路,echo输出结果,变量存数据,常量存固定值,数据类型决定怎么处理这些值。

下一章我们会深入数组和字符串操作,那才是真正开始玩花样的时候。先把这些基础打牢,别急着往下赶。我当年就是太着急,结果基础不牢,后面写项目各种踩坑。

记住:写代码就像盖房子,地基越稳,楼盖得越高。加油!