簡體   English   中英

如何在PHP中使用受保護的靜態?

[英]how to use protected static in php?

protected static $table = array(
            'createQuery' => 'CREATE TABLE IF NOT EXISTS `xf_user_notes` (
            `note_id` int(10) NOT NULL AUTO_INCREMENT,
            `given_user_id` int(10) NOT NULL,
            `received_user_id` int(10) NOT NULL,
            `note_message` VARCHAR(255) NOT NULL,
            `note_date` int(11) NOT NULL,
              PRIMARY KEY (`note_id`)
        ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;',
            'dropQuery' => 'DROP TABLE IF EXISTS `xf_user_notes`'
    );

以上代碼取自一個網站。

題:

我知道:protected只能在類本身內部以及由繼承的和父類訪問。static使它們無需類的實例化即可訪問。 但是通常在哪種情況下我們使用受保護的靜態? 誰能給我一個生動的例子? 謝謝。

不能在靜態方法內部調用非靜態方法(無需實例化類)。 受保護的靜態將使其無法從外部類訪問,但仍可以從公共靜態方法訪問。 這可能是為了將代碼的復雜部分分解為更易於維護的塊,或者是在另一個靜態方法內重復使用率很窄的情況。

這里引用自己:

靜態類屬性對於靜態數據很有用。 即,類實例所依賴的數據,但是這些數據永遠不會改變並且可能很大。 完全假設的示例:

 class Database { protected static $types = array( 'int' => array('internalType' => 'Integer', 'precision' => 0, ...), 'string' => array('internalType' => 'String', 'encoding' => 'utf-8', ...), ... ) } 

讓我們假設該數據庫類需要對來自數據庫的不同類型的數據進行處理,並將數據庫類型映射為內部類型。 為此,它需要一個類型映射。 這張地圖一直是每個實例相同的Database ,並使用幾種方法Database 好吧,為什么不將其設置為static屬性,而該屬性永遠不會被修改卻只能被讀取? 因為數據在Database所有實例之間共享,所以它節省了一點內存。 由於只能從類本身內部訪問數據,因此不會創建任何外部依賴項。 靜態屬性永遠不能公開訪問,因為它們只是全局變量。 我們已經看到了發展的方向...

靜態屬性對於緩存某些在類的所有實例中都相同的數據也可能很有用,一旦它被計算出來並且可以作為優化輕松地在實例之間共享。 在某些此類情況下,這很有用。 靜態屬性主要是一種優化技術,不應將它們視為編程哲學。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM