宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見(jiàn)問(wèn)題
產(chǎn)品動(dòng)態(tài)
精選推薦

【重磅更新】PHP 8.3版本來(lái)襲,這些新特性你絕對(duì)不能錯(cuò)過(guò)!

管理 管理 編輯 刪除

d4b36202311241608085652.png

2023年11月23日,PHP8.3正式發(fā)布。它包含了許多新功能,它包含了許多新功能,例如:類常量顯式類型、只讀屬性深拷貝,以及對(duì)隨機(jī)性功能的補(bǔ)充。一如既往,它還包括性能改進(jìn)、錯(cuò)誤修復(fù)和常規(guī)清理等。

類型化類常量

PHP < 8.3


interface I {
    // 我們可能天真地假設(shè) PHP 常量始終是一個(gè)字符串。
    const PHP = 'PHP 8.2';
}

class Foo implements I {
    // 但是實(shí)現(xiàn)類可以將其定義為數(shù)組。
    const PHP = [];
}

PHP 8.3


interface I {
    const string PHP = 'PHP 8.3';
}

class Foo implements I {
    const string PHP = [];
}

// 致命錯(cuò)誤:無(wú)法使用數(shù)組作為類常量的值
// 字符串類型的 Foo::PHP

動(dòng)態(tài)獲取類常量

PHP < 8.3


class Foo {
    const PHP = 'PHP 8.2';
}

$searchableConstant = 'PHP';

var_dump(constant(Foo::class . "::{$searchableConstant}"));

PHP 8.3


class Foo {
    const PHP = 'PHP 8.3';
}

$searchableConstant = 'PHP';

var_dump(Foo::{$searchableConstant});

新增 #[\Override] 屬性

PHP < 8.3


use PHPUnit\Framework\TestCase;

final class MyTest extends TestCase {
    protected $logFile;

    protected function setUp(): void {
        $this->logFile = fopen('/tmp/logfile', 'w');
    }

    protected function taerDown(): void {
        fclose($this->logFile);
        unlink('/tmp/logfile');
    }
}

// 日志文件永遠(yuǎn)不會(huì)被刪除,因?yàn)?
// 方法名稱輸入錯(cuò)誤(taerDown 與tearDown)。

PHP 8.3


use PHPUnit\Framework\TestCase;

final class MyTest extends TestCase {
    protected $logFile;

    protected function setUp(): void {
        $this->logFile = fopen('/tmp/logfile', 'w');
    }

    #[\Override]
    protected function taerDown(): void {
        fclose($this->logFile);
        unlink('/tmp/logfile');
    }
}

// 致命錯(cuò)誤:MyTest::taerDown() 有 #[\Override] 屬性,
// 但不存在匹配的父方法

通過(guò)給方法添加 #[\Override] 屬性,PHP 將確保在父類或?qū)崿F(xiàn)的接口中存在同名的方法。添加該屬性表示明確說(shuō)明覆蓋父方法是有意為之,并且簡(jiǎn)化了重構(gòu)過(guò)程,因?yàn)閯h除被覆蓋的父方法將被檢測(cè)出來(lái)。

只讀屬性深拷貝

PHP < 8.3

class PHP {
    public string $version = '8.2';
}

readonly class Foo {
    public function __construct(
        public PHP $php
    ) {}

    public function __clone(): void {
        $this->php = clone $this->php;
    }
}

$instance = new Foo(new PHP());
$cloned = clone $instance;

// 致命錯(cuò)誤:無(wú)法修改只讀屬性 Foo::$php

PHP 8.3

class PHP {
    public string $version = '8.2';
}

readonly class Foo {
    public function __construct(
        public PHP $php
    ) {}

    public function __clone(): void {
        $this->php = clone $this->php;
    }
}

$instance = new Foo(new PHP());
$cloned = clone $instance;

$cloned->php->version = '8.3';

readonly 屬性現(xiàn)在可以在魔術(shù)方法 __clone 中被修改一次,以此實(shí)現(xiàn)只讀屬性的深拷貝

新增 json_validate() 函數(shù)

PHP < 8.3


function json_validate(string $string): bool {
    json_decode($string);

    return json_last_error() === JSON_ERROR_NONE;
}

var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

PHP 8.3


var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

json_validate() 可以檢查一個(gè)字符串是否為語(yǔ)法正確的 JSON,比 json_decode() 更有效。

新增Randomizer::getBytesFromString()方法

PHP < 8.3

// 該功能需要手動(dòng)實(shí)現(xiàn)。
function getBytesFromString(string $string, int $length) {
    $stringLength = strlen($string);

    $result = '';
    for ($i = 0; $i < $length; $i++) {
        // random_int 不可用于測(cè)試,但安全。
        $result .= $string[random_int(0, $stringLength - 1)];
    }

    return $result;
}

$randomDomain = sprintf(
    "%s.example.com",
    getBytesFromString(
        'abcdefghijklmnopqrstuvwxyz0123456789',
        16,
    ),
);

echo $randomDomain;

PHP 8.3

// A \Random\Engine may be passed for seeding,
// the default is the secure engine.
$randomizer = new \Random\Randomizer();

$randomDomain = sprintf(
    "%s.example.com",
    $randomizer->getBytesFromString(
        'abcdefghijklmnopqrstuvwxyz0123456789',
        16,
    ),
);

echo $randomDomain;

在 PHP 8.2 中新增的 Random 擴(kuò)展 通過(guò)一個(gè)新方法生成由特定字節(jié)組成的隨機(jī)字符串。這種方法可以使開(kāi)發(fā)者更輕松的生成隨機(jī)的標(biāo)識(shí)符(如域名),以及任意長(zhǎng)度的數(shù)字字符串。

新增Randomizer::getFloat()和Randomizer::nextFloat()方法

PHP < 8.3


// 返回 $min 和 $max 之間的隨機(jī)浮點(diǎn)值,兩者都包括。
function getFloat(float $min, float $max) {
    // 該算法對(duì)特定輸入有偏差,并且可能
    // 返回超出給定范圍的值。這是不可能的
    // 在用戶空間中解決。
    $offset = random_int(0, PHP_INT_MAX) / PHP_INT_MAX;

    return $offset * ($max - $min) + $min;
}

$temperature = getFloat(-89.2, 56.7);

$chanceForTrue = 0.1;
// getFloat(0, 1) might return the upper bound, i.e. 1,
// introducing a small bias.
$myBoolean = getFloat(0, 1) < $chanceForTrue;

PHP 8.3

$randomizer = new \Random\Randomizer();

$temperature = $randomizer->getFloat(
    -89.2,
    56.7,
    \Random\IntervalBoundary::ClosedClosed,
);

$chanceForTrue = 0.1;
// Randomizer::nextFloat() is equivalent to
// Randomizer::getFloat(0, 1, \Random\IntervalBoundary::ClosedOpen).
// The upper bound, i.e. 1, will not be returned.
$myBoolean = $randomizer->nextFloat() < $chanceForTrue;

由于浮點(diǎn)數(shù)的精度和隱式四舍五入的限制,在特定區(qū)間內(nèi)生成無(wú)偏差的浮點(diǎn)數(shù)并非易事,常建的用戶解決方案可能會(huì)生成有偏差的結(jié)果或超出要求范圍的數(shù)字。

Randomizer 擴(kuò)展了兩種方法,用于隨機(jī)生成無(wú)偏差的浮點(diǎn)數(shù)。Randomizer::getFloat() 方法使用的是 γ-section 算法,該算法發(fā)表于 Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.

新的類、接口和函數(shù)


新增 DOMElement::getAttributeNames()、DOMElement::insertAdjacentElement()、DOMElement::insertAdjacentText()、DOMElement::toggleAttribute()、DOMNode::contains()、DOMNode::getRootNode()、DOMNode::isEqualNode()、DOMNameSpaceNode::contains() 和 DOMParentNode::replaceChildren() 方法。
新增 IntlCalendar::setDate()、IntlCalendar::setDateTime()、IntlGregorianCalendar::createFromDate() 和 IntlGregorianCalendar::createFromDateTime() 方法。
新增 ldap_connect_wallet() 和 ldap_exop_sync() 函數(shù)。
新增 mb_str_pad() 函數(shù)。
新增 posix_sysconf()、posix_pathconf()、posix_fpathconf() 和 posix_eaccess() 函數(shù)。
新增 ReflectionMethod::createFromMethodName() 方法
新增 socket_atmark() 函數(shù)。
新增 str_increment()、str_decrement() 和 stream_context_set_options() 函數(shù)。
新增 ZipArchive::getArchiveFlag() 方法。
支持在 OpenSSL 擴(kuò)展中使用自定義 EC 參數(shù)生成 EC 密鑰。
新增 INI 設(shè)置 zend.max_allowed_stack_size 用于設(shè)置允許的最大堆棧大小。

棄用和向后不兼容


更合適的 Date/Time 異常。
現(xiàn)在在空數(shù)組中獲取負(fù)索引 n 時(shí),將確保下一個(gè)索引是 n + 1 而不是 0。
對(duì) range() 函數(shù)的更改。
在 traits 中重新聲明靜態(tài)屬性的更改。
U_MULTIPLE_DECIMAL_SEPERATORS 常量已被廢棄,改為 U_MULTIPLE_DECIMAL_SEPARATORS。
MT_RAND_PHP Mt19937 變體已被廢棄。
ReflectionClass::getStaticProperties() 不再為空。
INI 配置 assert.active、assert.bail、assert.callback、assert.exception 和 assert.warning 已被廢棄。
調(diào)用 get_class() 和 get_parent_class() 時(shí)未提供參數(shù),已被廢棄。

詳細(xì)文檔:

https://www.php.net/releases/8.3/zh.php#typed_class_constants

請(qǐng)登錄后查看

CRMEB-慕白寒窗雪 最后編輯于2023-11-24 16:08:53

快捷回復(fù)
回復(fù)
回復(fù)
回復(fù)({{post_count}}) {{!is_user ? '我的回復(fù)' :'全部回復(fù)'}}
排序 默認(rèn)正序 回復(fù)倒序 點(diǎn)贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無(wú)簡(jiǎn)介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復(fù) {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)
查看更多
打賞
已打賞¥{{reward_price}}
3338
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見(jiàn)問(wèn)題 產(chǎn)品動(dòng)態(tài) 精選推薦 首頁(yè)頭條 首頁(yè)動(dòng)態(tài) 首頁(yè)推薦
取 消 確 定
回復(fù)
回復(fù)
問(wèn)題:
問(wèn)題自動(dòng)獲取的帖子內(nèi)容,不準(zhǔn)確時(shí)需要手動(dòng)修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當(dāng)前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請(qǐng)輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認(rèn)打賞

微信登錄/注冊(cè)

切換手機(jī)號(hào)登錄

{{ bind_phone ? '綁定手機(jī)' : '手機(jī)登錄'}}

{{codeText}}
切換微信登錄/注冊(cè)
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開(kāi)源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服