最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談PHP 8.5 核心特性

 更新時間:2026年05月26日 09:19:06   作者:不正經的小寒  
自 PHP 8.0 發(fā)布以來,該語言經歷了一系列重要的功能迭代與性能改進,本文就來詳細的介紹一下PHP 8.5 核心特性,感興趣的可以了解一下

簡介:

自 PHP 8.0 發(fā)布以來,該語言經歷了一系列重要的功能迭代與性能改進。對于開發(fā)者而言,系統(tǒng)理解這些新特性不僅是技術更新的需要,更是優(yōu)化代碼設計、降低維護成本的有效途徑。本分類將按版本梳理 PHP 8.x 的新特性。

8.5 官方手冊參考指南(含其他特性):官方鏈接

一、URL擴展

PHP 8.5 引入的內置 URI 擴展提供了符合 RFC 3986 和 WHATWG URL 兩大標準的 URI/URL 解析與處理能力,徹底解決了傳統(tǒng) parse_url() 函數(shù)的非標準性、安全性與功能局限性問題。

長久以來,PHP 開發(fā)者依賴 parse_url() 函數(shù)來處理 URL,傳統(tǒng) parse_url() 的主要問題:

  • 非標準性:不遵循任何官方標準,文檔明確警告 "不要用于不可信或格式錯誤的 URL"
  • 安全性隱患:對特殊 URL 解析錯誤,如 example.com/example/:8080/foo 會被錯誤解析為主機 + 端口 + 路徑組合
  • 功能受限:僅能解析,無法安全修改 URL 組件,且無規(guī)范化與驗證能力
  • 返回數(shù)組,非對象:難以鏈式操作或進行復雜的修改和重構

URI 擴展的核心優(yōu)勢:

  • 雙標準支持:同時提供 RFC 3986 (適用于通用的、面向網絡的 URI/URL 解析) 和 WHATWG URL (瀏覽器兼容,適用于需要與 Web 平臺交互的場景) 兩種實現(xiàn)
  • 內置且穩(wěn)定:作為 PHP 8.5+ 標準庫一部分,始終可用,無需額外依賴
  • 不可變對象:所有修改操作返回新實例,原對象保持不變,線程安全且便于鏈式調用
  • 完整驗證:嚴格遵循標準,提供清晰的異常體系,避免安全漏洞
  • 豐富 API:支持 URL 組件的獲取、修改、規(guī)范化與序列化,提供原始值與規(guī)范化值兩種訪問方式
  • 高性能:底層基于 C 語言庫 uriparser (RFC 3986) 和 Lexbor (WHATWG),性能優(yōu)于純 PHP 實現(xiàn)

兩大核心類介紹:

  • Uri\Rfc3986\Uri:RFC 3986 (URI 通用標準),通用 URI 處理、非 HTTP 協(xié)議 (如 mailto://、ftp://)、需要嚴格遵循 URI 規(guī)范的場景。
  • Uri\WhatWg\Url:WHATWG URL 標準,瀏覽器來源的 HTTP (S) URL、需要 IDNA 域名處理、與前端 / 瀏覽器行為保持一致的場景。

示例:

<?php

declare(strict_types=1);

use Uri\InvalidUriException;
use Uri\Rfc3986\Uri;
use Uri\WhatWg\Url;

echo '<pre>';

/******************* RFC 3986 解析示例 *******************/
// 方式一 : 直接使用構造函數(shù)(異常式)
$urlString = "https://user:pass@example.com:8080/path?query=1#fragment";
try{
    $uri = new Uri($urlString);
    // getScheme(): ?string 獲取協(xié)議方案,未提供則返回 null
    var_dump($uri->getScheme()); // https
    // getUser(): ?string 獲取用戶信息部分的用戶名,未提供則返回 null
    var_dump($uri->getUserInfo()); // user:pass
    // getHost(): ?string 獲取主機名,未提供則返回 null
    var_dump($uri->getHost()); // example.com
    // getPort(): ?int 獲取端口號,未提供則返回 null
    var_dump($uri->getPort()); // 8080
    // getPath(): ?string 獲取路徑,未提供則返回 null
    var_dump($uri->getPath()); // path
    // getQuery(): ?string 獲取查詢字符串,未提供則返回 null
    var_dump($uri->getQuery()); // query=1
    // getFragment(): ?string 獲取錨點,未提供則返回 null
    var_dump($uri->getFragment()); // fragment
    // 轉換為字符串
    var_dump($uri->toString()); // https://user:pass@example.com:8080/path?query=1#fragment
}catch(InvalidUriException $e){
    // URI 無效時拋出異常,可通過 $e->getMessage() 獲取錯誤信息
    echo '解析失?。? . $e->getMessage();
}

// 方式二 : 靜態(tài)解析方法  傳入的URI字符串無效時,它返回 null
$staticUri = Uri::parse($urlString);
var_dump($staticUri->getScheme()); // https

/******************* WHATWG URL 解析示例 *******************/
try {
    $whatWgUrl = new Url($urlString);
    var_dump($whatWgUrl->getScheme()); // https
} catch (InvalidUriException $e) {
    // URI 無效時拋出異常,可通過 $e->getMessage() 獲取錯誤信息
    echo '解析失?。? . $e->getMessage();
}

二、管道操作符(|>)

管道操作符(|>)是 PHP8.5 引入的核心語法特性,用于將多個函數(shù)調用串聯(lián)成線性數(shù)據(jù)流,實現(xiàn)從左到右的鏈式執(zhí)行。其核心邏輯是:將左側表達式的結果作為第一個參數(shù)傳遞給右側的單參數(shù)可調用對象,最終返回右側可調用對象的執(zhí)行結果。

解決的核心痛點:

  • 嵌套函數(shù)地獄:替代func3(func2(func1($value)))的金字塔式寫法,提升可讀性
  • 中間變量冗余:無需創(chuàng)建臨時變量存儲每一步處理結果
  • 邏輯順序倒置:將 "從內到外" 的執(zhí)行邏輯轉變?yōu)?"從左到右" 的自然閱讀順序
  • 函數(shù)組合困難:簡化多個函數(shù)的組合調用,鼓勵編寫純函數(shù)和單一職責函數(shù)

基礎示例:

<?php

declare(strict_types=1);

$title = ' PHP 8.5 Released ';
//>> 傳統(tǒng)嵌套寫法
$slug = strtolower(str_replace('.', '', str_replace(' ', '-', trim($title))));
echo '<pre>';
print_r($slug); // php-85-released

//>> 管道操作符寫法
$slugRe = $title
    |> trim(...) // 去除首尾空格
    |> (fn($str) => str_replace(' ','-', $str)) // 空格轉連字符
    |> (fn($str) => str_replace('.', '', $str)) // 移除點號
    |> strtolower(...); // 轉為小寫
echo '<br/>';
print_r($slugRe); // php-85-released

可調用類型支持:

  • 第一類可調用對象(First-class callables):strtolower(...)trim(...)
  • 函數(shù)名:'strtolower'(需用引號包裹)
  • 閉包 / 短閉包:fn($x) => $x * 2(注意:短閉包作為管道步驟時必須加括號)
  • 對象方法:$obj->method(...)、[$obj, 'method']
  • 靜態(tài)方法:Class::method(...)['Class', 'method']
  • 可調用表達式:任何計算結果為可調用對象的表達式

優(yōu)先級與結合性:

  • 左結合:管道鏈從左到右依次執(zhí)行,a |> b |> c等價于(a |> b) |> c
  • 優(yōu)先級:介于數(shù)學運算符和比較運算符之間。高于比較運算符(==>等),低于數(shù)學運算符(+、*等)、賦值運算符和三元運算符

示例:

<?php

declare(strict_types=1);

class Example {

    public static function staticProcess(mixed $data) : string 
    {
        return '靜態(tài)方法調用' . $data;
    }

    public function process(mixed $data):string 
    {
        return '實例方法調用' . $data;
    }
}

$data = 'MyClass';
//>> 靜態(tài)方法調用
$result = $data |> Example::staticProcess(...);
print_r($result); // 靜態(tài)方法調用MyClass

//>> 實例方法調用
$myClass = new Example();
$result = $data |> $myClass->process(...);
echo '<br/>';
print_r($result); // 實例方法調用MyClass

//>> 閉包調用(必須加括號)
$number = 2;
$result = $number |> (fn($x) => $x * 2) |> (fn($x) => $x + 1);
echo '<br/>';
print_r($result); // 5


function someFunc( int $params){
    return $params !== 7 ? $params * 2 : null;
}

// 等價于 (5 + 3) |> someFunc(...)
$result = 5 + 3 |> someFunc(...);
echo '<br/>';
print_r($result); // 16

// 等價于 ('beep' |> strlen(...)) == 4
$result = 'beep' |> strlen(...) == 4;
echo '<br/>';
print_r($result); // 1(true)

// 等價于 ((5 + 2) |> get_username(...)) ?? 'default'
$result = 5 + 2 |> someFunc(...) ?? 'default';
echo '<br/>';
print_r($result); // default

// 需要顯式括號改變優(yōu)先級
$result = 6 |> (someFunc(7) ?? someFunc(...));
// 觸發(fā)錯誤:PHP 的管道運算符 |> 要求右側必須是一個可調用對象(callable)。即使這個可調用對象執(zhí)行后可能返回 null,但右側本身不能是 null
// $result = 6 |> someFunc(7) ?? someFunc(...); // Fatal error: Uncaught Error: Value of type null is not callable in
echo '<br/>';
print_r($result); // 12

核心限制:

  • 單參數(shù)要求:右側可調用對象必須只有一個必需參數(shù),否則會拋出 "參數(shù)不足" 錯誤
  • 禁止引用參數(shù):不支持右側可調用對象接收引用參數(shù)(&$param),這與管道的純函數(shù)設計理念沖突,會導致 "無法通過引用傳遞參數(shù)" 錯誤(例外:標準庫中少數(shù) "prefer-ref" 函數(shù)(如sort())會按值傳遞并表現(xiàn)相應行為)
  • 短閉包括號要求:當短閉包作為管道步驟時,必須用括號包裹,否則會導致語法錯誤
  • 條件管道鏈:需用括號明確優(yōu)先級,避免邏輯錯誤
  • 空值處理:管道鏈不會自動處理空值,需顯式添加空值檢查步驟

三、Clone With

PHP 8.5 引入的 Clone With 特性(官方稱為 clone() 函數(shù)擴展)是對傳統(tǒng)對象克隆機制的重大升級,它允許開發(fā)者在克隆對象時原子化地修改指定屬性,尤其為不可變對象(immutable objects) 和 readonly 類提供了優(yōu)雅的更新方案,徹底告別了繁瑣的樣板代碼。

執(zhí)行流程:

  • 創(chuàng)建原始對象的淺拷貝(與傳統(tǒng) clone 行為一致)
  • 執(zhí)行新對象的 __clone() 方法(如果已定義)
  • 應用 Clone With 中的屬性修改(關鍵步驟)
  • 返回修改后的新對象

關鍵區(qū)別:與傳統(tǒng)克隆后手動賦值不同,Clone With 的屬性修改發(fā)生在 __clone() 方法執(zhí)行之后,這意味著:

  • 可以在 __clone() 中設置基礎狀態(tài),再通過 Clone With 微調
  • readonly 屬性在此時可以被合法修改(符合 PHP 8.3+ 對 readonly 屬性在克隆時的特殊處理規(guī)則)

語法示例:

<?php

declare(strict_types=1);

readonly class Example {
    public function __construct(
        public string $user
    ){}
    
    // PHP 8.4 及更早版本(繁瑣實現(xiàn))
    /* public function withUser(string $user): self {
        $values = get_object_vars($this);
        $values['user'] = $user;
        return new self(...$values); // 需重新構造整個對象
    } */

    // 類內合法:可修改所有屬性,包括private/protected/readonly
    public function withUser(string $user): self {
        return clone($this, ['user' => $user]);
    }

}

$example = new Example('user1');

//>> 兼容舊版本的傳統(tǒng)寫法(完全保留,無BC break)
$cloneExample1 = clone $example;
$cloneExample2 = clone($example); // 并不是函數(shù)調用,而是 clone 語法允許括號包裹被克隆的對象
$cloneExample3 = \clone($example); // 全局命名空間限定寫法
echo '<pre>';
var_dump($cloneExample1->user); // user1
var_dump($cloneExample2->user); // user1
var_dump($cloneExample3->user); // user1

//>> 新增Clone With核心寫法
$newExample1 = clone($example, []); // 函數(shù)式調用 空屬性數(shù)組,等價于純克隆
$newExample2 = $example->withUser('user2'); // Clone With 修改任何readonly屬性
//  readonly 類中的所有屬性都是只讀的,任何外部賦值(包括克隆后的新對象)都會拋出 Error。屬性設置為 public(set) string $user則正常
//$newExample3 = clone($example, ['user' => 'user3']);
var_dump($newExample1->user); // user1
var_dump($newExample2->user); // user2
//var_dump($newExample3->user); // 屬性設置為 public(set) string $user 結果為 user3

四、#[\NoDiscard] 屬性

PHP 長期允許忽略函數(shù)返回值,導致三類隱蔽 bug 頻繁出現(xiàn):

  • 返回布爾值被默認成功:如rename()函數(shù)忽略返回值,生產環(huán)境權限問題導致文件未移動卻無人察覺
  • 不可變對象更新失效:如DateTimeImmutable::set*()方法返回新實例,開發(fā)者誤寫為原地修改語法
  • Result/Either 類型錯誤被掩蓋:返回錯誤信息的函數(shù)被忽略,導致問題被延遲發(fā)現(xiàn)

PHP 8.5 新增的內置屬性,用于標記函數(shù)或方法的返回值不應被忽略。當調用標記了該屬性的函數(shù)卻未使用其返回值時,PHP 會發(fā)出警告,幫助開發(fā)者捕獲潛在的邏輯錯誤。

語法示例:

<?php

declare(strict_types=1);

 #[\NoDiscard]
// #[\NoDiscard('自定義提示消息')] // 自定義提示信息
function validateEmail(string $email): bool {
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

$emailStr = 'xxxx@gmail.com';
// 警告信息: Warning: The return value of function validateEmail() should either be used or intentionally ignored by casting it as (void) in
// 警告信息: Warning: The return value of function validateEmail() should either be used or intentionally ignored by casting it as (void), 自定義提示消息 in
// validateEmail($emailStr); // 只調用不賦值 無返回值 觸發(fā)警示
// PHP 8.5 引入(void)強制轉換,用于明確表示故意忽略返回值,抑制警告
(void) validateEmail($emailStr); // 無警告

// 哪些算返回值?
/** 1.賦值給變量(即使是未使用的變量) */
$re = validateEmail($emailStr); // 無警告
$_ = validateEmail($emailStr); // 無警告(常用啞變量表示顯式接收) 由于 (void) 強制轉換是在 PHP 8.5 中新增的,如果你的代碼需要兼容 PHP 8.4 及以下版本,可以使用臨時變量來替代:

/** 2.作為表達式一部分 */
if (validateEmail($emailStr)) { /* ... */ } // 無警告
print_r(validateEmail($emailStr) ? 'Valid' : 'Invalid'); // 無警告 Valid

/** 3.進行類型轉換 */
(bool) validateEmail($emailStr); // 無警告

注意事項:

  • 返回類型為voidnever的函數(shù)、必須無返回的魔術方法、屬性鉤子  添加#[\NoDiscard]會導致編譯錯誤。
  • #[\NoDiscard] 不是強制機制,只是發(fā)出警告,不會阻止代碼執(zhí)行。若要強制處理返回值,需結合 Result 類型和嚴格的錯誤處理策略。
  • 不要給所有函數(shù)添加#[\NoDiscard],這會讓團隊對警告產生免疫力,反而掩蓋真正重要的問題。遵循 "只在忽略返回值可能導致隱蔽 bug 時使用" 的原則。
  • #[\NoDiscard]只檢查語法層面的使用,不保證語義層面的正確處理。

最佳實踐:

  • 批量處理函數(shù):官方 RFC 中的 bulk_process() 示例最為典型:函數(shù)處理一組數(shù)據(jù),返回每個條目的處理狀態(tài)(成功或異常)。由于大多數(shù)情況下(如 99.99%)都成功,開發(fā)者很容易忽略返回值,從而掩蓋邊緣情況下的失敗 
  • 不可變 API(DateTimeImmutable 類):DateTimeImmutable::set*() 系列方法是 #[\NoDiscard 的典型適用對象:方法名聽起來像是在原地修改,但實際上返回一個新實例。如果不使用返回值,所有修改都將丟失
  • Result 模式 / Either 模式:在 API 集成或錯誤處理場景中,函數(shù)返回包含操作結果的 Result 對象。直接調用而不處理返回值,就等于無視了所有可能的失敗——這正是 #[\NoDiscard] 要解決的問題。

五、常量表達式中的閉包和 First-class 可調用

PHP 8.5 將 靜態(tài)閉包與First-class 可調用對象 (FCC) 正式納入常量表達式的合法范疇,解決了長期以來無法在聲明式代碼中直接使用函數(shù)邏輯的痛點。可用于以下場景:

  • 屬性參數(shù)(注解 / 特性參數(shù))
  • 屬性默認值與參數(shù)默認值
  • 全局常量與類常量

示例:

<?php

declare(strict_types=1);

/*************** 靜態(tài)閉包在常量表達式中的應用 ************************/
// 1. 類常量中的靜態(tài)閉包
class Validator {
    public const DEFAULT_STRING_VALIDATOR = static function(string $value): bool {
        return strlen(trim($value)) > 0;
    };
}

// 2. 函數(shù)參數(shù)默認值
function processData(mixed $data, Closure $transformer = static function(mixed $input): mixed {
    return is_string($input) ? trim($input) : $input;
}): mixed {
    return $transformer($data);
}

// 3. 屬性默認值
class User {
    private Closure $nameFormatter = static function(string $name): string {
        return ucwords(strtolower($name));
    };
    
    public function formatName(string $name): string {
        return ($this->nameFormatter)($name);
    }
}

// 4. 屬性參數(shù)(注解)
#[Attribute]
class Sanitize {
    public function __construct(public Closure $callback) {}
}

class Article {
    #[Sanitize(static function(string $content): string {
        return strip_tags($content);
    })]
    public string $content;
}

/*************** First-class 可調用對象 (FCC) 的常量表達式支持 ************************/
// 1. 常量中的FCC
const STRLEN_CALLABLE = strlen(...);
const ARRAY_FILTER_CALLABLE = array_filter(...);

// 2. 類常量中的靜態(tài)方法FCC
class StringUtils {
    public static function capitalize(string $str): string {
        return ucfirst(strtolower($str));
    }
    
    public const CAPITALIZE = self::capitalize(...);
}

// 3. 屬性參數(shù)中的FCC
#[Attribute]
class Transform {
    public function __construct(public Closure $callback) {}
}

class Product {
    #[Transform(strtoupper(...))]
    public string $name;
    
    #[Transform(StringUtils::capitalize(...))]
    public string $description;
}

// 4. 參數(shù)默認值中的FCC
function mapArray(array $array, Closure $mapper = strval(...)): array {
    return array_map($mapper, $array);
}

為保證常量表達式的編譯時可計算與不可變性,該特性設有三條硬性約束,違反將直接拋出語法錯誤:

  • 必須是靜態(tài)的:閉包不能訪問$this,無對象綁定。禁止 function() { return $this->id; } 允許 static function() { return 42; }
  • 禁止外部變量捕獲:不能使用use(...)語法。禁止 function() use($foo) { return $foo; } 允許 static function($x) { return $x*2; }
  • 禁用箭頭函數(shù):箭頭函數(shù)隱式捕獲外部變量,不符合常量語義。禁止 fn($x) => $x + $y 允許 static fn($x) => $x * 2
  • 閉包內常量表達式限制:僅允許閉包出現(xiàn)在常量表達式中,不允許在閉包內部使用復雜常量表達式(如__DIR__、類常量、函數(shù)調用)作為默認參數(shù)。

最佳實踐:

  • 優(yōu)先使用 FCC:對于簡單的函數(shù)引用,優(yōu)先使用 First-class 可調用,代碼更簡潔、性能更好。
  • 明確靜態(tài)修飾:始終顯式添加static關鍵字,增強代碼可讀性,避免隱式錯誤。
  • 避免復雜邏輯:常量閉包應保持簡潔,復雜邏輯建議封裝為獨立函數(shù),再通過 FCC 引用。
  • 結合類型提示:為閉包參數(shù)和返回值添加類型提示,提升代碼安全性和 IDE 支持。
  • 文檔注釋:為常量閉包添加詳細注釋,說明其功能和使用場景。

六、持久化 cURL Share 句柄

cURL Share 句柄是 libcurl 提供的共享機制,允許多個 cURL 句柄(easy handle)共享特定類型的數(shù)據(jù),從而避免重復計算和資源消耗。傳統(tǒng)的 curl_share_init() 創(chuàng)建的句柄僅在單次 PHP 請求內有效,請求結束后會被銷毀。持久化 cURL Share 句柄通過 curl_share_init_persistent() 函數(shù)實現(xiàn),核心突破在于

  • 跨請求存活:句柄在多個 PHP 請求之間保持,不會隨請求結束而銷毀
  • 自動復用:相同共享選項的句柄會被自動復用,無需手動管理持久化 ID
  • 性能躍升:避免重復的 DNS 解析、SSL 握手和連接建立,這些操作通常占網絡請求耗時的30%-70%

適用場景:

  • 高頻調用同一 API 服務的 Web 應用
  • 微服務架構中服務間的頻繁通信
  • 數(shù)據(jù)采集 / 爬蟲類應用
  • 長期運行的 CLI 腳本或守護進程

示例:

<?php

declare(strict_types=1);

/**
 * 語法:curl_share_init_persistent(array $share_options): CurlSharePersistentHandle
 * $share_options 必須是非空數(shù)組,元素為 CURL_LOCK_DATA_* 常量
 * 禁止包含 CURL_LOCK_DATA_COOKIE(會拋出 ValueError),防止用戶間敏感信息泄露
 *無效常量或非整數(shù)值會拋出 ValueError 或 TypeError
 * 
 * 支持的共享數(shù)據(jù)類型:
 * CURL_LOCK_DATA_DNS    DNS 解析緩存    安全(無用戶敏感信息)
 * CURL_LOCK_DATA_CONNECT    連接池與 SSL 會話    安全(連接級數(shù)據(jù),無用戶標識)
 * CURL_LOCK_DATA_SSL_SESSION    SSL 會話緩存    安全
 * CURL_LOCK_DATA_PSL    公共后綴列表緩存    安全
 * CURL_LOCK_DATA_COOKIE    Cookie 數(shù)據(jù)    禁止(用戶敏感信息)
 * 
 */
// 創(chuàng)建或復用持久化共享句柄(共享DNS和連接)
$sh = curl_share_init_persistent([
    CURL_LOCK_DATA_DNS,
    CURL_LOCK_DATA_CONNECT
]);
// 初始化cURL句柄并關聯(lián)共享句柄
$ch = curl_init('https://example.com/api/data');
curl_setopt($ch, CURLOPT_SHARE, $sh);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 執(zhí)行請求(第二次請求會復用連接和DNS緩存)
$response = curl_exec($ch);
echo '<pre>';
var_dump($response); // 返回的接口數(shù)據(jù) 字符串

七、array_first() 與 array_last() 函數(shù)

array_first() 和 array_last() 是 PHP 8.5 中引入的兩個新函數(shù)。它們旨在用一種無副作用、簡潔且統(tǒng)一的方式,來獲取任意數(shù)組的第一個和最后一個元素。這兩個函數(shù)填補了 PHP 原生函數(shù)庫的空白,提供了非破壞性、指針安全的數(shù)組首尾元素訪問方式,完美互補了 PHP 7.3 引入的array_key_first()array_key_last() 函數(shù)。

語法示例:

<?php

declare(strict_types=1);

/**
 * 語法:$array    array    必需。要操作的輸入數(shù)組
 * function array_first(array $array): mixed;  // PHP 8.5+
 * function array_last(array $array): mixed;   // PHP 8.5+ 
 * 
 * 返回值: 
 * 如果數(shù)組非空,返回數(shù)組的第一個 / 最后一個元素值
 * 如果數(shù)組為空,返回null
 * 如果返回的元素是引用類型,會自動解引用,不會返回引用本身
 */
//>> 索引數(shù)組
$fruits = ["apple", "banana", "cherry"];
echo '<pre>';
var_dump(array_first($fruits)); // 輸出: apple
var_dump(array_last($fruits));  // 輸出: cherry

//>> 非連續(xù)索引數(shù)組
$numbers = [1 => "one", 3 => "three", 5 => "five"];
var_dump(array_first($numbers)); // 輸出: one (按數(shù)組內部順序,不是鍵名排序)
var_dump(array_last($numbers));  // 輸出: five

// 關聯(lián)數(shù)組
$config = [
    "host" => "localhost",
    "port" => 3306,
    "dbname" => "test"
];

var_dump(array_first($config)); // 輸出: localhost
var_dump(array_last($config));  // 輸出: test

//>> 空數(shù)組處理
$empty = [];
var_dump(array_first($empty));  // 輸出: NULL
var_dump(array_last($empty));   // 輸出: NULL

//>> 包含引用的數(shù)組
$str = "hello";
$array = [&$str, "world"];
var_dump(array_first($array));  // 輸出: string(5) "hello" (已解引用)
var_dump(array_last($array));   // 輸出: string(5) "world"

到此這篇關于淺談PHP 8.5 核心特性的文章就介紹到這了,更多相關PHP 8.5 特性內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

泾川县| 增城市| 宜宾市| 承德市| 宣威市| 青岛市| 海林市| 云阳县| 桃源县| 阳东县| 永宁县| 博爱县| 光山县| 万山特区| 潢川县| 长宁区| 当涂县| 荆州市| 永平县| 泸州市| 钦州市| 望江县| 唐山市| 满城县| 且末县| 库尔勒市| 板桥市| 玉溪市| 建始县| 平阳县| 二连浩特市| 磴口县| 乌鲁木齐县| 阜城县| 扎兰屯市| 和顺县| 宜昌市| 革吉县| 安化县| 时尚| 工布江达县|