PHP-Klassenkonstanten – öffentlich, privat oder geschützt?

Lesezeit: 3 Minuten

Gehe ich richtig davon aus, dass const-Eigenschaften automatisch öffentlich sind? Gibt es eine Möglichkeit, sie privat oder geschützt zu machen?

Danke im Voraus.

  • Was ist der Grund, sie zu verstecken? Obwohl sie öffentlich sind, werden sie nur gelesen.

    – zerkms

    22. Dezember 2010 um 0:21 Uhr

  • Konstanten sollen öffentlich sein, weil sie unveränderliche Tatsachen über die Klasse beschreiben sollen, nicht den Staat oder ihn. Es macht also keinen Sinn, sie zu verstecken.

    – StasM

    22. Dezember 2010 um 0:50 Uhr

  • Könnte sie in zukünftigen Versionen mit fälschen __getStatic. Generell ist es fraglich, ob man in Skriptsprachen überhaupt Zugriffsmodifikatoren benötigt. (Javascript/Python sind viel objektorientierter und brauchen sie nicht.)

    – mario

    22. Dezember 2010 um 2:14 Uhr

  • Ich denke nicht, dass es eine dumme Frage ist; Private Klassenkonstanten wären nützlich: Für den internen Gebrauch in der Klasse … könnten öffentliche Methoden sie verwenden, aber externer Code sollte nicht von ihnen abhängen … die API könnte sich ändern.

    – Hundewetter

    2. Oktober 2011 um 22:11 Uhr

  • Nun, zum einen, wenn Sie eine Datenbankklasse erstellen möchten, wäre es sinnvoll, den Host, den Benutzernamen, den Server und die Datenbank als private Konstanten zu deklarieren, oder?

    – Benutzer1020069

    25. Juni 2012 um 21:17 Uhr

Benutzer-Avatar
BoltClock

In der Vergangenheit waren Klassenkonstanten immer öffentlich zugänglich, solange die Klasse geladen war und es keine Möglichkeit gab, dies zu ändern.

Ab PHP 7.1 bleiben sie aber standardmäßig öffentlich Zugriffsmodifikatoren können jetzt angewendet werden. Hier ist das Beispiel aus den Versionshinweisen:

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

Benutzer-Avatar
Scott

Klassenkonstanten sollten die Möglichkeit haben, privat/geschützt zu sein, da sie interne Details der Klasse offenlegen, die andere Klassen/Code fälschlicherweise verwenden können, weil sie glauben, dass sie in Ordnung sind, weil sie öffentlich sind.

Es wäre schön zu wissen, dass das Ändern einer privaten Konstante NUR die Klasse betrifft, in der sie definiert ist. Leider haben wir diese Option nicht.

Erinnern Sie sich an die Zeit, als Sie Objektdesign und -analyse gelernt haben … Sie geben Klassenmethoden und -attributen den möglichst restriktiven Zugriff und lockern sie später nach Bedarf (viel schwieriger, in die andere Richtung zurückzukehren, da andere Klassen / Code beginnen, sie zu verwenden). würde dann anderen Code brechen).

ABHILFE

Am besten erstellen Sie einfach eine private oder geschützte Variable und schreiben sie in Großbuchstaben, um zu zeigen, dass es sich um eine Konstante handelt. Sie könnten immer eine Klasse namens constant($value_to_be_constant) erstellen, die die richtigen magischen Methoden / spl-Schnittstellen implementiert, um zu verhindern, dass sie geändert werden.

Benutzer-Avatar
Mrok

Mir ist bewusst, dass diese Frage 6 Jahre alt ist

Php 7.1 (derzeit RC1) ermöglicht es, die Sichtbarkeit von Klassenkonstanten anzugeben.

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

zusätzliche Information

Ab php7.1mit können Sie Ihre Klassenkonstanten definieren Zugriffsmodifikatoren (public, private oder protected). Sehen Sie sich das folgende Beispiel an:

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

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

1311840cookie-checkPHP-Klassenkonstanten – öffentlich, privat oder geschützt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy