const const用法 - PHP類常量-公共,私有還是受保護?




define用法 array (5)

我知道這個問題是6歲

Php 7.1(當前為RC1)允許指定類常量的可見性。

class Token {
        // Constants default to public
        const PUBLIC_CONST = 0;

        // Constants then also can have a defined visibility
        private const PRIVATE_CONST = 0;
        protected const PROTECTED_CONST = 0;
        public const PUBLIC_CONST_TWO = 0;

        //Constants can only have one visibility declaration list
        private const FOO = 1, BAR = 2;
}

附加信息

假設const屬性是自動公開的,我是否正確? 有沒有辦法讓它們變得私密或受到保護?

提前致謝。


php7.1開始 ,您可以使用訪問修飾符publicprivateprotected )定義類常量。 看看下面的例子:

<?php
class superheroes{
    public const kal_el = 'Superman';
    protected const bruce_wayne = 'Batman'; # works php7.1 onwards
    private const anthony_stark = 'Iron Man'; # works php7.1 onwards

    public static function show_remaining(){
        echo self::bruce_wayne, '<br />';
        echo self::anthony_stark, '<br />';
    }
}
echo superheroes::kal_el, '<br />';
superheroes::show_remaining();

致謝: http://dwellupper.io/post/48/defining-class-constants-in-phphttp://dwellupper.io/post/48/defining-class-constants-in-php


從歷史上看,只要類被加載並且無法改變它,類常量總是可公開訪問。

從PHP 7.1開始,默認情況下它們仍然是公共的,但現在可以應用訪問修飾符 。 以下是發行說明中的示例:

<?php
class ConstDemo
{
    const PUBLIC_CONST_A = 1;
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
}

類常量應該具有私有/受保護的選項,因為公開暴露了類的內部細節,其他類/代碼可能會錯誤地使用它們認為它們可以使用,因為它們是公共的。

很高興知道更改私有常量只會影響它定義的類。不幸的是我們沒有那個選項。

回想一下當你學習對象設計和分析時...你給類方法和屬性最可能的限制訪問,然後根據需要放鬆它們(更難以回到另一個方向,因為其他類/代碼開始使用它們然後會打破其他代碼)。

替代方法

最好的辦法是創建一個私有或受保護的變量,大寫它以顯示它是一個常量。 您始終可以創建一個名為constant($ value_to_be_constant)的類,該類實現正確的魔術方法/ spl接口以防止其被更改。


<=>宇宙飛船運營商

在PHP 7中添加

宇宙飛船運營商 <=>是PHP 7中添加的最新比較運算符。它是一個非關聯二元運算符,具有與相等運算符相同的優先級( ==!====!== )。 該運算符允許在左手操作數和右手操作數之間進行更簡單的三向比較。

運算符導致整數表達式為:

  • 兩個操作數相等時為0
  • 當左側操作數小於右側操作數時小於0
  • 當左側操作數大於右側操作數時,大於0

例如

1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1

使用此運算符的一個很好的實際應用是比較類型回調,預期基於兩個值之間的三向比較返回零,負或正整數。 傳遞給usort的比較函數就是一個這樣的例子。

在PHP 7之前你會寫...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    if ($a < $b) {
        return -1;
    } elseif ($a > $b) {
        return 1;
    } else {
        return 0;
    }
});

從PHP 7開始,你可以寫...

$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    return $a <=> $b;
});




php const