programmazione - php variabili di classe




Costanti di classe PHP: pubbliche, private o protette? (3)

Sono corretto assumendo che le proprietà const siano automaticamente pubbliche? C'è un modo per renderli privati ​​o protetti?

Grazie in anticipo.


A partire da php7.1 , è possibile definire le costanti di classe con modificatori di accesso ( public , private o protected ). Dai un'occhiata al seguente esempio:

<?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();

Crediti: http://dwellupper.io/post/48/defining-class-constants-in-php


Le costanti di classe dovrebbero avere la possibilità di essere private / protette perché essere pubbliche espone i dettagli interni della classe che altre classi / codici possono usare in modo errato pensando di essere ok perché sono pubblici.

Sarebbe bello sapere che la modifica di una costante privata influirebbe SOLO sulla classe in cui è definita. Purtroppo non abbiamo questa opzione.

Ricorda a quando stavi imparando la progettazione e l'analisi degli oggetti ... dai metodi di classe e attribuisci l'accesso più RESTRICTIVO possibile, e poi rilassali quando necessario (molto più difficile tornare indietro perché altre classi / codice iniziano a usarli che quindi interromperà l'altro codice).

SOLUZIONE

La cosa migliore è semplicemente creare una variabile privata o protetta e la maiuscola per mostrare che è una costante. Si può sempre creare una classe chiamata costante ($ valore_per_una costanza) che implementa i metodi magici corretti / interfacce spl per impedire che venga modificata.


Sono consapevole che questa domanda ha 6 anni

Php 7.1 (attualmente RC1) consente di specificare la visibilità sulle costanti di classe.

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;
}

informazioni addizionali





const