PhpStorm advanced metadata — .phpstorm.meta.php

PhpStorm 是一款很只能的PHP編輯器,絕大部分的class 都能智能的提示對應類型。但是有一些使用 __call() 來實現的映射功能 無法自動獲取。 譬如 laravel或自定義的一些特殊映射功能。 PhpStorm 的 .phpstorm.meta.php 這時候就派上了用場。

直接在項目的根目錄創建一個文檔.phpstorm.meta.php內容格式如下:

<?php
namespace PHPSTORM_META {
    //metadata directives
}

override() 定義函數返回類型,例如:

override(\app(), map([
    "" => "@",
    "tree" => \App\Services\TreeService::class,
    "common" => \App\Services\CommonService::class,
]));

上面列子中 app('tree') 自動會匹配 \App\Services\TreeService

expectedArguments() 定義函數接受的參數,例如:

expectedArguments(
    \fun1(),
    0,
    'tree',
    'common'
);

上列中 在編輯器中輸入 fun1() 自動彈出提示參數 tree common

更詳細的參考文檔: https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html

PHP SPL 擴展

Standard PHP Library (SPL) 標準PHP類庫;內容主要包括數據結構類、叠代器、異常類、SPL函數,還提供了一系列的接口。

不需要安裝,它們是 PHP 核心的一部分。

以下是一些常用的SPL數據結構:

  • SplQueue:基於隊列的數據結構,支持先進先出(FIFO)的元素操作。
  • SplStack:基於棧的數據結構,支持後進先出(LIFO)的元素操作。
  • SplHeap:基於堆的數據結構,支持非比較排序和插入、刪除等操作。
  • SplObjectStorage:用於存儲和跟蹤PHP對象引用的數據結構。
  • SplFixedArray:基於哈希表實現的小型數組,具有常數時間的訪問和
  • SplPriorityQueue:基於堆的數據結構,支持帶優先級元素的插入、刪除等操作。

SPL函數裏面有個很重要的東西,spl_autoload_register(),在oop中用來實現自動加載。除了上述數據結構,SPL還提供了其他一些有用的類和方法,例如叠代器、集合等

PHP 7.2 棄用 __autoload(), 可用spl_autoload_register() 

php7.2 及以後的版本, __autoload() 方法已被廢棄, 因為和 spl_autoload_register() 相比功能較差 (因為無法鏈式處理多個 autoloader), 而且也無法在兩種 autoloading 洋式中配合使用。

作為 __autoload() 函數的替代:

<?php

// 棄用
// function __autoload($class) {
//     include 'classes/' . $class . '.class.php';
// }

function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

// 或者可以使用匿名函數
spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});