PHP语法基础 #

一、PHP文件结构 #

1.1 基本结构 #

php
<?php

declare(strict_types=1);

namespace App;

use Some\Library;

class Example
{
    
}

1.2 文件命名 #

  • 文件名使用小写字母
  • 多个单词用下划线或连字符分隔
  • 类文件名与类名一致(PascalCase)
text
user_controller.php
UserController.php

二、注释 #

2.1 单行注释 #

php
<?php
echo "Hello";

2.2 多行注释 #

php
<?php

echo "Hello";

2.3 文档注释(DocBlock) #

php
<?php

/**
 * 用户类
 * 
 * 用于管理用户信息和操作
 * 
 * @package App\Models
 * @author  Developer
 * @version 1.0.0
 */
class User
{
    /**
     * 用户ID
     * @var int
     */
    private int $id;
    
    /**
     * 获取用户名
     * 
     * @return string 用户名
     */
    public function getName(): string
    {
        return $this->name;
    }
    
    /**
     * 设置用户年龄
     * 
     * @param int $age 用户年龄,必须大于0
     * @return void
     * @throws InvalidArgumentException 如果年龄小于0
     */
    public function setAge(int $age): void
    {
        if ($age < 0) {
            throw new InvalidArgumentException("年龄不能小于0");
        }
        $this->age = $age;
    }
}

2.4 常用DocBlock标签 #

标签 用途 示例
@param 参数说明 @param string $name 名称
@return 返回值说明 @return bool 是否成功
@throws 异常说明 @throws Exception 异常
@var 变量类型 @var int $count
@see 参考链接 @see https://php.net
@deprecated 废弃说明 @deprecated 1.5.0 使用newMethod()

三、标识符 #

3.1 命名规则 #

标识符必须遵循以下规则:

  • 以字母或下划线开头
  • 只能包含字母、数字、下划线
  • 区分大小写
php
<?php
$name = "valid";
$_name = "valid";
$name1 = "valid";
$Name = "different from $name";

$1name = "invalid";
$my-name = "invalid";

3.2 命名规范 #

变量:小驼峰(camelCase)

php
<?php
$firstName = "John";
$lastName = "Doe";
$userAge = 25;

常量:大写蛇形(UPPER_SNAKE_CASE)

php
<?php
define('MAX_SIZE', 100);
const MIN_VALUE = 0;

函数:小驼峰或蛇形

php
<?php
function getUserName() {}
function get_user_name() {}

类:大驼峰(PascalCase)

php
<?php
class UserController {}
class OrderItem {}

方法:小驼峰

php
<?php
class User
{
    public function getFullName() {}
    private function calculateTotal() {}
}

四、关键字 #

4.1 保留关键字 #

PHP保留关键字不能用作常量、类名或函数名:

text
abstract    and         array       as          break
callable    case        catch       class       clone
const       continue    declare     default     die
do          echo        else        elseif     empty
enddeclare  endfor      endforeach  endif      endswitch
endwhile    eval        exit        extends    final
finally     fn          for         foreach    function
global      goto        if          implements include
include_once instanceof insteadof interface  isset
list        match       namespace   new        or
print       private     protected   public     readonly
require     require_once return      static     switch
throw       trait       try         unset      use
var         while       xor         yield      yield from

4.2 预定义常量 #

php
<?php
echo PHP_VERSION;
echo PHP_OS;
echo PHP_EOL;
echo PHP_INT_MAX;
echo DIRECTORY_SEPARATOR;

4.3 魔术常量 #

php
<?php
echo __LINE__;
echo __FILE__;
echo __DIR__;
echo __FUNCTION__;
echo __CLASS__;
echo __METHOD__;
echo __NAMESPACE__;

五、代码规范(PSR) #

PSR(PHP Standards Recommendations)是PHP的编码规范。

5.1 PSR-1:基础编码规范 #

php
<?php

namespace App\Model;

use App\Service\UserService;

class UserController
{
    const VERSION = '1.0';
    
    private UserService $userService;
    
    public function getUser(int $id): ?User
    {
        return $this->userService->find($id);
    }
}

5.2 PSR-12:扩展编码规范 #

缩进:

使用4个空格,不使用Tab。

行长度:

每行不超过120字符。

命名空间和use:

php
<?php

declare(strict_types=1);

namespace App\Controller;

use App\Service\UserService;
use App\Service\OrderService;
use App\Repository\UserRepository;

class UserController
{
    
}

类和方法:

php
<?php

class Example
{
    private string $name;
    
    public function __construct(string $name)
    {
        $this->name = $name;
    }
    
    public function process(
        string $input,
        int $count,
        bool $flag = false
    ): array {
        if ($flag) {
            return [];
        }
        
        $result = [];
        for ($i = 0; $i < $count; $i++) {
            $result[] = $input;
        }
        
        return $result;
    }
}

控制结构:

php
<?php

if ($condition) {
    
} elseif ($anotherCondition) {
    
} else {
    
}

switch ($value) {
    case 1:
        doSomething();
        break;
    case 2:
        doOther();
        break;
    default:
        doDefault();
}

foreach ($items as $key => $value) {
    
}

六、语句分隔 #

6.1 分号 #

PHP语句以分号结尾:

php
<?php
$a = 1;
$b = 2;
echo $a + $b;

6.2 最后一个分号 #

在PHP结束标签前的最后一个分号可以省略:

php
<?php echo "Hello" ?>

但推荐保留:

php
<?php echo "Hello"; ?>

6.3 纯PHP文件 #

纯PHP文件不使用结束标签:

php
<?php

namespace App;

class Helper
{
    public static function format(string $input): string
    {
        return trim($input);
    }
}

七、空白与格式 #

7.1 空格使用 #

操作符两侧:

php
<?php
$result = $a + $b * $c;
$isValid = ($x > 0) && ($y < 100);

逗号后:

php
<?php
function add(int $a, int $b, int $c): int
{
    return $a + $b + $c;
}

$values = [1, 2, 3, 4, 5];

关键字后:

php
<?php
if ($condition) {
    
}

while ($running) {
    
}

foreach ($items as $item) {
    
}

7.2 空行使用 #

  • 方法之间空一行
  • 逻辑块之间可空一行
  • 文件末尾空一行
php
<?php

class Calculator
{
    public function add(int $a, int $b): int
    {
        return $a + $b;
    }
    
    public function subtract(int $a, int $b): int
    {
        return $a - $b;
    }
    
    public function complex(
        int $a,
        int $b,
        int $c
    ): int {
        $sum = $this->add($a, $b);
        
        return $this->subtract($sum, $c);
    }
}

八、严格模式 #

PHP 7+支持严格类型模式:

php
<?php

declare(strict_types=1);

function add(int $a, int $b): int
{
    return $a + $b;
}

add(1, 2);
add(1.5, 2.5);

九、代码格式化工具 #

9.1 PHP-CS-Fixer #

bash
composer require --dev friendsofphp/php-cs-fixer

vendor/bin/php-cs-fixer fix src/

9.2 PHP_CodeSniffer #

bash
composer require --dev squizlabs/php_codesniffer

vendor/bin/phpcs src/
vendor/bin/phpcbf src/

十、总结 #

本章学习了:

  • PHP文件的基本结构
  • 单行、多行、文档注释
  • 标识符命名规则和规范
  • PHP关键字和保留字
  • PSR编码规范
  • 代码格式化最佳实践

遵循良好的编码规范,可以让代码更易读、更专业。下一章将学习PHP的数据类型。

最后更新:2026-03-26