Skip to content

PHP

PHP 支持通过 PHP 扩展 提供。

安装 PHP

PHP 扩展需要 PHP 已安装并且在您的 PATH 中可用:

sh
# macOS 使用 Homebrew
brew install php

# Debian/Ubuntu
sudo apt-get install php-cli

# CentOS 8+/RHEL
sudo dnf install php-cli

# Arch Linux
sudo pacman -S php

# 检查 PHP 路径
## macOS 和 Linux
which php

## Windows
where php

选择语言服务器

PHP 扩展使用 LSP 语言服务器,默认为 Phpactor。如果您想使用其他支持 Zed 的语言服务器(例如 Intelephense 或 PHP Tools),请务必遵循文档说明进行实现。

Intelephense

Intelephense 是一个采用免费增值模式的专有 PHP 语言服务器。某些功能需要购买高级许可证

在设置 ({#kb zed::OpenSettings}) 中的 语言 > PHP 下配置语言服务器,或将其添加到您的设置文件中:

json
{
  "languages": {
    "PHP": {
      "language_servers": ["intelephense", "!phpactor", "!phptools", "..."]
    }
  }
}

要使用高级功能,您可以将许可证文件放置在 macOS 和 Linux 的主目录 ~/intelephense/licence.txt 中,或在 Windows 上放置在 %USERPROFILE%/intelephense/licence.txt

或者,您可以将许可证密钥或包含许可证密钥的文件路径作为初始化选项传递。为此,请将以下内容添加到您的 settings.json

json
{
  "lsp": {
    "intelephense": {
      "initialization_options": {
        "licenceKey": "/path/to/licence.txt"
      }
    }
  }
}

PHP Tools

PHP Tools 是一个提供免费和高级功能的专有语言服务器。您需要购买许可证才能激活高级功能。

在设置 ({#kb zed::OpenSettings}) 中的 语言 > PHP 下配置语言服务器,或将其添加到您的设置文件中:

json
{
  "languages": {
    "PHP": {
      "language_servers": ["phptools", "!intelephense", "!phpactor", "..."]
    }
  }
}

要使用高级功能,您可以在 settings.jsoninitialization_options 中添加您的许可证:

json
{
  "lsp": {
    "phptools": {
      "initialization_options": {
        "0": "your_license_key"
      }
    }
  }
}

或者,在您项目中的 .env 文件中设置环境变量 DEVSENSE_PHP_LS_LICENSE

env
DEVSENSE_PHP_LS_LICENSE="your_license_key"

有关更多详细信息,请查阅 Zed 的 PHP Tools 文档

Phpactor

在设置 ({#kb zed::OpenSettings}) 中的 语言 > PHP 下配置语言服务器,或将其添加到您的设置文件中:

json
{
  "languages": {
    "PHP": {
      "language_servers": ["phpactor", "!intelephense", "!phptools", "..."]
    }
  }
}

PHPDoc

Zed 支持 PHPDoc 注释的语法高亮。

调试

PHP 扩展通过 Xdebug 为 PHP 提供调试适配器。有几种使用方法:

json
[
  {
    "label": "PHP: Listen to Xdebug",
    "adapter": "Xdebug",
    "request": "launch",
    "port": 9003
  },
  {
    "label": "PHP: Debug this test",
    "adapter": "Xdebug",
    "request": "launch",
    "program": "vendor/bin/phpunit",
    "args": ["--filter", "$ZED_SYMBOL"]
  }
]

如果您遇到问题,以下是一些常见的故障排除提示:

  • 确保您已为正在运行的 PHP 版本安装了 Xdebug。
  • 确保 Xdebug 配置为在 debug 模式下运行。
  • 确保 Xdebug 实际上正在启动调试会话。
  • 确保 Xdebug 和 Zed 之间的主机和端口匹配。
  • 通过在您要调试的页面中使用 xdebug_info() 函数来查看诊断日志。

在 PHP 中使用 Tailwind CSS 语言服务器

要在 PHP 文件中获得 Tailwind CSS 语言服务器 的所有功能(自动补全、代码检查等),您需要配置该语言服务器,使其知道在哪里查找 CSS 类,方法是将以下内容添加到您的 settings.json

json
{
  "lsp": {
    "tailwindcss-language-server": {
      "settings": {
        "includeLanguages": {
          "php": "html"
        },
        "experimental": {
          "classRegex": [
            "class=\"([^\"]*)\"",
            "class='([^']*)'",
            "class=\\\"([^\\\"]*)\\\""
          ]
        }
      }
    }
  }
}

通过这些设置,您将在 PHP 文件中 HTML 属性内获得 Tailwind CSS 类的自动补全。示例:

php
<?php
// 带有 HTML 的 PHP 文件:
?>
<div class="flex items-center <completion here>">
  <p class="text-lg font-bold <completion here>">Hello World</p>
</div>

Laravel/Blade

对于 Laravel/Blade 文件,您可能需要额外的配置来处理 Blade 指令:

json
{
  "lsp": {
    "tailwindcss-language-server": {
      "settings": {
        "includeLanguages": {
          "php": "html",
          "blade": "html"
        },
        "experimental": {
          "classRegex": [
            "class=\"([^\"]*)\"",
            "class='([^']*)'",
            "class=\\\"([^\\\"]*)\\\"",
            "@class\\(\\[([^\\]]*)\\]\\)"
          ]
        }
      }
    }
  }
}

这也将提供 Blade 指令中的自动补全,例如:

blade
{{-- Blade 文件 --}}
<div class="flex {{ $customClass }} <completion here>">
  @class(['flex', 'items-center', '<completion here>'])
</div>