2010-08-18 22 views
5

ho scoperto che le costanti di oggetti in PHP hanno sempre visibilità pubblica in modo che non è possibile impostare loro di protected o private in questo modo:la visibilità di oggetto costanti

<?php 
class MyClass { 
    protected const constant = "this won't work"; 
} 
?> 

Qual è la spiegazione per questo? Non riesco a pensare a una buona ragione per forzare le costanti a essere pubbliche.

+2

* (correlato) * http://bugs.php.net/bug.php?id=27022 – Gordon

risposta

4

Questa è una domanda piuttosto filosofica, discussa nello comments for Class constants in the PHP Manual. L'argomento sembra essere che Visibility identifica chi ha il diritto di cambiare membri, non chi ha il diritto di leggerli. Poiché le costanti non possono essere modificate, non ha senso farle supportare la visibilità quando la visibilità è intesa come modificatori di accesso. Se segui questa argomentazione o vai con the linked feature request below your question dipende da te.

+0

Non seguo affatto l'argomento, ma buon collegamento! –

+0

@Pekka si, sono indeciso su quale seguire. Riesco a vedere gli usi per le costanti che hanno visibilità, ma poi di nuovo, non ho mai sentito una forte impressione. Le costanti sono costanti e se ho bisogno di visibilità io uso le proprietà. – Gordon

+0

sì, anch'io penso che non sia un grosso problema in entrambi i casi (anche se è interessante). Ma l'argomento secondo cui "la visibilità controlla il diritto di * scrivere *" non ha alcun senso per me. Mi sembra del tutto sbagliato. –

1

Non riesco a pensare a una buona ragione per forzare le costanti a essere pubbliche.

Beh, le costanti sono statiche definizioni, legati alla classe di e non istanziati oggetti. Possono essere indirizzati solo utilizzando classname::constname e non possono essere modificati. È ovvio che fanno parte del progetto di una classe, e quindi non ha senso applicare regole di visibilità a loro.

Questa è solo la mia opinione piuttosto soggettiva, però. Interessato a vedere se qualsiasi cosa basata sulla teoria OOP dura viene fuori.

+2

Hmm, i membri della classe statica non dovrebbero essere sempre pubblici anche da quella definizione? – Gordon

+0

@Gordon hmm, vero. –

Problemi correlati