• 28/06 cập nhật đăng ký đăng nhập qua Google & Facebook

Cấu hình PHP Intelephense

TenHoshi

Administrator
Staff member
Trusted Uploader

Code Lens (hiển thị số liệu ngay trên dòng code)​

  • Implementations: Enable
    EN: Show count & peek of class/interface implementations →
    VN: Hiện số nơi implement & cho phép peek →
    Bật. Hữu ích khi làm OOP, trait/interface nhiều.
  • Overrides: Enable
    EN: Show override count & peek →
    VN: Hiện số method override & peek →
    Bật. Dễ rà soát kế thừa.
  • Parent: Enable
    EN: Show if a method has a parent impl & peek →
    VN: Báo có implement ở cha & peek →
    Bật. Điều hướng nhanh.
  • References: Enable
    EN: Show reference count & peek →
    VN: Đếm nơi được tham chiếu & peek →
    Bật. Tìm ảnh hưởng khi refactor.
  • Usages: Enable
    EN: Show trait usages count & peek →
    VN: Đếm nơi dùng trait & peek →
    Bật. Dự án nhiều trait sẽ cần.

Compatibility (tương thích kiểu)​

  • Correct For Array Access/Traversable Array Union Types
    EN: Normalise ArrayAccess|T[] → ArrayAccess<mixed,T> →
    VN: Chuẩn hoá union có mảng sang generic →
    Bật. Gợi ý & kiểm tra type ổn định hơn.
  • Correct For Base Class Static Union Types
    EN: Resolve BaseClass|static thành static →
    VN: Ưu tiên static đúng ngữ nghĩa late-static →
    Bật. Chính xác khi kế thừa.
  • Prefer Psalm Phpstan Prefixed Annotations
    EN: Ưu tiên tag @psalm-/@phpstan- →
    VN: Dựa vào chú thích Psalm/PhpStan để suy luận kiểu →
    Bật (nếu bạn dùng Psalm/PhpStan hoặc anotations có sẵn).
    Tắt nếu dự án không dùng các tag này để tránh nhiễu.

Completion (gợi ý code)​

  • Fully Qualify Global Constants And Functions
    EN: Suggest with leading \ →
    VN: Gợi ý kèm backslash global →
    Tuỳ. Bật nếu bạn thích rõ scope; Tắt nếu thích code gọn.
  • Insert Use Declaration
    EN/VN: Tự thêm use khi chọn symbol namespaced →
    Bật. Tiết kiệm thao tác import.
  • Max Items (100)
    EN/VN: Số item tối đa trong completion →
    100 là hợp lý. Tăng nếu bạn muốn nhiều hơn, nhưng có thể rối.
  • Suggest Object Operator Static Methods
    EN: Cho gợi ý static methods với -> →
    VN: Đề xuất static method khi dùng toán tử đối tượng →
    Tắt để tránh gọi nhầm (khuyến nghị). Bật nếu bạn cố ý muốn thấy tất cả.
  • Trigger Parameter Hints
    EN/VN: Tự chèn () và bật hint tham số →
    Bật. Viết nhanh, giảm sai sót.

Diagnostics (cảnh báo & lỗi)​

  • Enable
    EN/VN: Bật hệ thống chẩn đoán →
    Bật.
  • Run: onType
    EN: Chạy khi gõ →
    VN: Cảnh báo “real-time” →
    Giữ onType nếu máy khoẻ; đổi onSave nếu bị lag.
  • Argument Count / Deprecated / Duplicate Symbols / Embedded Languages / Implementation Errors / Language Constraints / Member Access / Type Errors / Undefined (Class Constants / Constants / Functions / Methods / Properties / Types / Variables) / Unexpected Tokens / Unused Symbols
    EN/VN: Từng mục bật cảnh báo tương ứng →
    Bật tất cả để code an toàn, trừ khi dự án cũ quá “ồn” thì giảm dần.
  • No Mixed Type Check
    EN: Tắt kiểm tra nghiêm với mixed (nới lỏng) →
    VN: Cho phép mixed qua dễ hơn →
    Tắt (khuyến nghị strict). Bật nếu codebase nhiều mixed/thiếu khai báo.
  • Relaxed Type Check
    EN: Nới lỏng kiểm tra (cho contravariant rộng) →
    VN: Dễ dãi hơn với type →
    Tắt (khuyến nghị strict). Bật với dự án legacy để bớt nhiễu.

Environment (môi trường phân giải)​

  • Document Root
    EN: Thư mục entry (chứa index.php) để resolve include/path →
    VN: Đặt đúng webroot của app →
    Nên set (vd: www/ hay public/). Giúp require/include gợi ý đúng.
  • Include Paths
    EN/VN: Khai báo include_path/thư viện ngoài →
    Nên set nếu bạn có lib ngoài (vd: vendor/extra, app/helpers).
  • PHP Version: 8.4.0
    EN/VN: Mục tiêu phiên bản PHP để lint/đề xuất →
    Set đúng version chạy thực tế (vd: 8.1/8.2/8.3). Đặt sai sẽ cảnh báo lệch.
  • Short Open Tag (on)
    EN/VN: Parse <? như open tag →
    Tắt nếu bạn không dùng short tags (khuyến nghị chuẩn). Bật chỉ khi code cũ cần.

Files (tệp)​

  • Associations
    EN/VN: Ánh xạ glob pattern → ngôn ngữ PHP →
    Tuỳ. Dùng khi cần bật tính năng cho đuôi lạ.
  • Exclude
    EN/VN: Loại trừ thư mục khỏi index (git, vendor tests, node_modules, …) →
    Giữ mặc định, thêm các thư mục build/cache riêng của bạn để tăng tốc.
  • Max Size (1,000,000 bytes)
    EN/VN: Tệp lớn hơn sẽ bị bỏ qua language features →
    Giữ mặc định. Tăng nếu bạn có file PHP lớn bất khả kháng (nhưng cân nhắc chia nhỏ).

Format (định dạng)​

  • Braces
    EN/VN: Kiểu ngoặc {} →
    Tuỳ chuẩn team. (PSR-12: ngoặc mở xuống dòng cho class/method)
  • Format: Enable
    Bật.
    Kết hợp Prettier/PHP CS Fixer hoặc phpcbf sẽ đồng nhất hơn.

PhpDoc (template sinh PHPDoc)​

  • Class / Function / Property Template
    EN/VN: Mẫu sinh phpdoc với biến snippet →
    Tuỳ. Nếu team ghi chú rõ ràng, hãy tuỳ biến để chèn @param, @return, @template, v.v.

Rename​

  • Exclude
    EN/VN: Loại các path khi rename symbol →
    Giữ bỏ vendor/** (không đụng code vendor). Thêm thư mục generated nếu có.
  • Namespace Mode: single
    EN/VN: Phạm vi đổi tên namespace →
    Giữ single cho an toàn; đổi rộng khi bạn chắc chắn.

Runtime / Stubs / Telemetry / Trace​

  • Runtime (Node path)
    EN/VN: Chọn Node runtime riêng →
    Để mặc định trừ khi bạn cần bản Node cụ thể.
  • Stubs
    EN/VN: Bộ stub cho PHP core & extensions →
    Giữ mặc định, thêm stub extension bạn thực sự dùng (redis, swoole, amqp, …) để có IntelliSense.
  • Telemetry: Enabled
    EN/VN: Gửi ẩn danh usage/crash →
    Tắt nếu bạn không muốn gửi telemetry.
  • Trace: Server (off)
    EN/VN: Log giao tiếp VSCode↔︎server →
    Off thường ngày; On khi debug lỗi Intelephense.
  • Max Memory (0 = auto)
    EN/VN: Giới hạn RAM language server →
    Để 0 (auto). Nếu dự án rất lớn và bị out-of-memory, thử tăng (1024–2048).

Gợi ý cấu hình nhanh​

1) Strict profile (khuyến nghị dự án mới/typed, PSR-12, ít mixed)​

  • Code Lens: On tất cả
  • Compatibility: On tất cả
  • Completion: InsertUse=On, TriggerParamHints=On, **SuggestStaticWithObject=**Off, FullyQualifyGlobal = Tuỳ (Off nếu muốn code gọn)
  • Diagnostics: On tất cả, RelaxedTypeCheck=Off, NoMixedTypeCheck=Off, Run=onType (đổi onSave nếu lag)
  • Environment: PHP Version = đúng thực tế, ShortOpenTag=Off, set DocumentRoot, IncludePaths nếu cần
  • Files: Exclude giữ mặc định + thêm thư mục build/cache riêng, MaxSize=1,000,000
  • Format: Enable=On, Braces theo PSR-12
  • PhpDoc: tuỳ biến template theo chuẩn team
  • Rename: Exclude vendor/, NamespaceMode=single
  • Stubs: giữ mặc định, thêm extension bạn dùng
  • Telemetry: Off (nếu không muốn gửi dữ liệu)
  • Trace: Off (bật khi debug)

2) Legacy profile (dự án cũ, thiếu type-hints, nhiều mixed)​

  • Code Lens: On
  • Compatibility: On
  • Completion: InsertUse=On, TriggerParamHints=On, SuggestStaticWithObject=On (để “thấy hết”), FullyQualifyGlobal=Off
  • Diagnostics: Enable=On, RelaxedTypeCheck=On, NoMixedTypeCheck=On, còn lại On nhưng có thể tắt Unused tạm nếu quá ồn; Run=onSave để đỡ lag
  • Environment: ShortOpenTag=On (nếu code dùng short tags), PHP Version khớp prod
  • Files: mở rộng Exclude để nhẹ máy (log/cache/compiled)
  • Format: Enable=On nhưng khoan auto-format toàn repo (tránh diff lớn)
  • PhpDoc: bật auto template để dần “gõ type” vào chú thích
  • Telemetry/Trace theo nhu cầu

Ghi chú nhỏ cho team​

  • Nếu bạn đang chuẩn hoá dần sang typed PHP (union types, generics via PHPDoc), nên theo Strict profile để Intelephense “ép chuẩn” sớm → bug giảm rõ rệt.
  • Nếu đang “gỡ nợ kỹ thuật”, bắt đầu với Legacy profile, sau đó từng bước: tắt RelaxedTypeCheck, rồi tắt NoMixedTypeCheck, thêm type hint & phpdoc, nâng PHP version target, bật format/PSR-12.
 

TenHoshi

Administrator
Staff member
Trusted Uploader
Khi bạn mở file PHP qua WinSCP (tức là đang chỉnh sửa file từ server VPS chứ không phải project local), Intelephense chỉ “thấy” đúng file đang mở, không index được toàn bộ project — vì vậy các hàm ở file khác (include, require, autoload...) đều bị coi là “undefined function”.


Để tắt cảnh báo Undefined function/class/... khi làm việc kiểu này, bạn có thể chỉnh trong VS Code như sau:

🧩 Cách 1 – tắt từng loại Diagnostic​

Mở Command Palette (Ctrl+Shift+P) → gõ:

Preferences: Open Settings (JSON)

Thêm vào:

Code:
"intelephense.diagnostics.undefinedFunctions": false,
"intelephense.diagnostics.undefinedConstants": false,
"intelephense.diagnostics.undefinedMethods": false,
"intelephense.diagnostics.undefinedProperties": false,
"intelephense.diagnostics.undefinedTypes": false,
"intelephense.diagnostics.undefinedVariables": false

👉 Tắt toàn bộ lỗi “undefined” (dành cho khi bạn chỉ sửa nhanh file rời trên server).

⚙️ Cách 2 – tắt toàn bộ chẩn đoán (mọi lỗi)​


Nếu bạn chỉ dùng VSCode như Notepad để chỉnh nhanh:

"intelephense.diagnostics.enable": false

➡ Không còn underline đỏ nào cả, nhưng cũng không còn kiểm lỗi cú pháp.

💡 Cách 3 – giữ lại lint cơ bản, tắt chỉ riêng undefined​


Nếu bạn vẫn muốn cảnh báo cú pháp, nhưng không báo lỗi vì thiếu include:

Code:
"intelephense.diagnostics.enable": true,
"intelephense.diagnostics.undefinedFunctions": false,
"intelephense.diagnostics.undefinedTypes": false

🔧 Gợi ý thực tế​


Mục đíchGợi ý cấu hình
Chỉnh nhanh file PHP qua WinSCPTắt hết diagnostics (intelephense.diagnostics.enable=false)
Làm dự án local đầy đủBật lại (true) để tận dụng toàn bộ lint, auto-complete
Kết hợp cả hai (vừa debug server, vừa code local)Dùng workspace riêng cho VPS: mỗi server 1 folder VSCode có settings.json riêng

Nếu bạn muốn, mình có thể tạo cho bạn file settings.json mẫu chỉ dành riêng cho “chế độ WinSCP/VPS” – bật format, tắt diagnostics, tắt telemetry — bạn chỉ cần copy vào .vscode/settings.json. Muốn mình tạo luôn không?
 

Guest Post 2022

Bài viết gần đây

Top