Qual è la differenza tra pubblico, privato e protetto?


989

Quando e perché dovrei usare public, privateeprotected funzioni e variabili all'interno di una classe? Qual'è la differenza tra loro?

Esempi:

// Public
public $variable;
public function doSomething() {
  // ...
}

// Private
private $variable;
private function doSomething() {
  // ...
}

// Protected
protected $variable;
protected function doSomething() {
  // ...
}

59
Penso che questa domanda trarrebbe beneficio anche dalle risposte con esempi pratici dell'uso di ciascuno, invece di fornire la definizione letterale di ciò che fa ogni parola chiave.
Matthew,

70
Penso davvero che questa domanda dovrebbe essere pubblica, non protetta.
dotancohen,

Risposte:


1261

Usate:

  • public ambito per rendere quella proprietà / metodo disponibile da qualsiasi luogo, altre classi e istanze dell'oggetto.

  • private ambito quando si desidera che la propria proprietà / metodo sia visibile solo nella propria classe.

  • protected ambito quando si desidera rendere visibile la propria proprietà / metodo in tutte le classi che estendono la classe corrente inclusa la classe genitore.

Altro: (per informazioni complete)


79
protectedambito quando si desidera rendere visibile la variabile / funzione in tutte le classi che estendono la classe corrente E le sue classi principali .
Shahid,

4
@Shahid - Non capisco il tuo punto. Qualsiasi classe che estende la classe A estende anche la classe padre di A, no?
JDelage,

4
@JDelage - Vedi il linkhttp://www.php.net/manual/en/language.oop5.visibility.php#109324
Shahid,

4
@Growler Perché perdere tempo con gli oggetti?
J.Steve,

27
@Growler, una risposta più utile sarebbe che è bene nascondere il più possibile i meccanismi interni di un oggetto. In questo modo è meno probabile che si rompa. Se rendi tutto pubblico, un altro programmatore potrebbe alterare una variabile che non desideri venga modificata da qualcosa di diverso dal funzionamento interno del tuo oggetto.
Rilassarsi a Cipro il

1176

dd

Pubblico:

Quando si dichiara un metodo (funzione) o una proprietà (variabile) come public, è possibile accedere a tali metodi e proprietà tramite:

  • La stessa classe che l'ha dichiarato.
  • Le classi che ereditano la classe dichiarata sopra.
  • Anche qualsiasi elemento estraneo al di fuori di questa classe può accedere a tali elementi.

Esempio:

<?php

class GrandPa
{
    public $name='Mark Henry';  // A public variable
}

class Daddy extends GrandPa // Inherited class
{
    function displayGrandPaName()
    {
        return $this->name; // The public variable will be available to the inherited class
    }

}

// Inherited class Daddy wants to know Grandpas Name
$daddy = new Daddy;
echo $daddy->displayGrandPaName(); // Prints 'Mark Henry'

// Public variables can also be accessed outside of the class!
$outsiderWantstoKnowGrandpasName = new GrandPa;
echo $outsiderWantstoKnowGrandpasName->name; // Prints 'Mark Henry'

protetto:

Quando si dichiara un metodo (funzione) o una proprietà (variabile) come protected, è possibile accedere a tali metodi e proprietà

  • La stessa classe che l'ha dichiarato.
  • Le classi che ereditano la classe dichiarata sopra.

I membri esterni non possono accedere a tali variabili. "Outsiders", nel senso che non sono istanze oggetto della stessa classe dichiarata.

Esempio:

<?php

class GrandPa
{
    protected $name = 'Mark Henry';
}

class Daddy extends GrandPa
{
    function displayGrandPaName()
    {
        return $this->name;
    }

}

$daddy = new Daddy;
echo $daddy->displayGrandPaName(); // Prints 'Mark Henry'

$outsiderWantstoKnowGrandpasName = new GrandPa;
echo $outsiderWantstoKnowGrandpasName->name; // Results in a Fatal Error

L'errore esatto sarà questo:

Errore irreversibile PHP: impossibile accedere alla proprietà protetta GrandPa :: $ name


Privato:

Quando si dichiara un metodo (funzione) o una proprietà (variabile) come private, è possibile accedere a tali metodi e proprietà tramite:

  • La stessa classe che l'ha dichiarato.

I membri esterni non possono accedere a tali variabili. Gli outsider nel senso che non sono istanze di oggetto della classe dichiarata stessa e neppure le classi che ereditano la classe dichiarata.

Esempio:

<?php

class GrandPa
{
    private $name = 'Mark Henry';
}

class Daddy extends GrandPa
{
    function displayGrandPaName()
    {
        return $this->name;
    }

}

$daddy = new Daddy;
echo $daddy->displayGrandPaName(); // Results in a Notice 

$outsiderWantstoKnowGrandpasName = new GrandPa;
echo $outsiderWantstoKnowGrandpasName->name; // Results in a Fatal Error

I messaggi di errore esatti saranno:

Avviso: Proprietà
non definita : Daddy :: $ name Errore irreversibile: Impossibile accedere alla proprietà privata GrandPa :: $ name


Analizzare la classe del nonno usando Reflection

Questo argomento non è davvero fuori dal campo di applicazione e lo sto aggiungendo qui solo per dimostrare che la riflessione è davvero potente. Come avevo affermato nei tre esempi precedenti, protectedeprivate membri (proprietà e metodi) non è possibile accedere al di fuori della classe.

Tuttavia, con la riflessione puoi fare qualcosa di straordinario accedendo protectedeprivate membri al di fuori della classe!

Bene, cos'è la riflessione?

Reflection aggiunge la possibilità di decodificare classi, interfacce, funzioni, metodi ed estensioni. Inoltre, offrono modi per recuperare i commenti dei documenti per funzioni, classi e metodi.

Preambolo

Abbiamo una classe chiamata Grandpase diciamo che abbiamo tre proprietà. Per una facile comprensione, considera che ci sono tre nonni con nomi:

  • Mark Henry
  • John Clash
  • Will Jones

Cerchiamo di loro (modificatori assegnare) facciamo public, protectede private, rispettivamente. Lo sai benissimo che protectedeprivate non è possibile accedere ai membri al di fuori della classe. Ora contraddiciamo l'affermazione usando la riflessione.

Il codice

<?php

class GrandPas   // The Grandfather's class
{
    public     $name1 = 'Mark Henry';  // This grandpa is mapped to a public modifier
    protected  $name2 = 'John Clash';  // This grandpa is mapped to a protected  modifier
    private    $name3 = 'Will Jones';  // This grandpa is mapped to a private modifier
}


# Scenario 1: without reflection
$granpaWithoutReflection = new GrandPas;

# Normal looping to print all the members of this class
echo "#Scenario 1: Without reflection<br>";
echo "Printing members the usual way.. (without reflection)<br>";
foreach($granpaWithoutReflection as $k=>$v)
{
    echo "The name of grandpa is $v and he resides in the variable $k<br>";
}

echo "<br>";

#Scenario 2: Using reflection

$granpa = new ReflectionClass('GrandPas'); // Pass the Grandpas class as the input for the Reflection class
$granpaNames=$granpa->getDefaultProperties(); // Gets all the properties of the Grandpas class (Even though it is a protected or private)


echo "#Scenario 2: With reflection<br>";
echo "Printing members the 'reflect' way..<br>";

foreach($granpaNames as $k=>$v)
{
    echo "The name of grandpa is $v and he resides in the variable $k<br>";
}

Produzione:

#Scenario 1: Without reflection
Printing members the usual way.. (Without reflection)
The name of grandpa is Mark Henry and he resides in the variable name1

#Scenario 2: With reflection
Printing members the 'reflect' way..
The name of grandpa is Mark Henry and he resides in the variable name1
The name of grandpa is John Clash and he resides in the variable name2
The name of grandpa is Will Jones and he resides in the variable name3

Idee sbagliate comuni:

Si prega di non confondere con l'esempio seguente. Come puoi ancora vedere, i membri privatee protectednon sono accessibili al di fuori della classe senza usare la riflessione

<?php

class GrandPas   // The Grandfather's class
{
    public     $name1 = 'Mark Henry';  // This grandpa is mapped to a public modifier
    protected  $name2 = 'John Clash';  // This grandpa is mapped to a protected modifier
    private    $name3 = 'Will Jones';  // This grandpa is mapped to a private modifier
}

$granpaWithoutReflections = new GrandPas;
print_r($granpaWithoutReflections);

Produzione:

GrandPas Object
(
    [name1] => Mark Henry
    [name2:protected] => John Clash
    [name3:GrandPas:private] => Will Jones
)

Funzioni di debug

print_r, var_exportE var_dumpsono le funzioni del debugger . Presentano informazioni su una variabile in una forma leggibile dall'uomo. Queste tre funzioni riveleranno le proprietà protectede privatedegli oggetti con PHP 5. I membri di classe statici non verranno mostrati.


Altre risorse:



scuse per il ritardo aggiungere a questo convo. Puoi dirmi perché qualcuno dovrebbe usarli? Hai spiegato perfettamente come funzionano ecc. Vorrei solo sapere i vantaggi dell'uso per ognuno di questi. Grazie
JamesG

@JamesG è un po 'spiegato nell'altro commento sopra. stackoverflow.com/questions/4361553/...
cjmling

Non so perché forse è un po 'fuori questione, ma nessuno ha detto che in PHP ci sono altri due modificatori di accesso: astratto e finale questa parola chiave può essere utilizzata solo per le classi PHP ma accede ancora ai modificatori
bxN5

1
Vorrei suggerire di leggere le spiegazioni per l'astrazione fornita da Dhairya Lakhera qui: stackoverflow.com/questions/2558559/... . È un'aggiunta perfetta alle spiegazioni di Shankar Damodaran.
Julio Marchi,

83

In genere si considera buona norma impostare la visibilità minima richiesta in quanto ciò favorisce l'incapsulamento dei dati e una buona progettazione dell'interfaccia. Quando si considera la variabile del membro e la visibilità del metodo, pensare al ruolo che il membro gioca nell'interazione con altri oggetti.

Se si "codifica per un'interfaccia piuttosto che l'implementazione", di solito è piuttosto semplice prendere decisioni sulla visibilità. In generale, le variabili dovrebbero essere private o protette a meno che non si abbia una buona ragione per esporle. Usa gli accessi pubblici (getter / setter) invece per limitare e regolare l'accesso agli interni di una classe.

Per usare un'auto come analogia, cose come velocità, marcia e direzione sarebbero variabili di istanza private. Non vuoi che il guidatore manipoli direttamente cose come il rapporto aria / carburante. Invece, esponi un numero limitato di azioni come metodi pubblici. L'interfaccia ad una macchina potrebbe includere metodi come accelerate(), deccelerate()/ brake(), setGear(), turnLeft(),turnRight() , etc.

Il guidatore non sa e non dovrebbe preoccuparsi di come queste azioni siano implementate dagli interni dell'auto, ed esporre che la funzionalità potrebbe essere pericolosa per il guidatore e gli altri su strada. Da qui la buona pratica di progettare un'interfaccia pubblica e incapsulare i dati dietro tale interfaccia.

Questo approccio consente inoltre di modificare e migliorare l'implementazione dei metodi pubblici nella propria classe senza interrompere il contratto dell'interfaccia con il codice client. Ad esempio, è possibile migliorare il accelerate()metodo per essere più efficiente in termini di consumo di carburante, ma l'utilizzo di tale metodo rimarrebbe lo stesso; il codice client non richiederebbe modifiche, ma continuerà a raccogliere i benefici del miglioramento dell'efficienza.

Modifica: poiché sembra che tu sia ancora nel mezzo dell'apprendimento di concetti orientati agli oggetti (che sono molto più difficili da padroneggiare della sintassi di qualsiasi lingua), consiglio vivamente di prendere una copia di PHP Objects, Patterns and Practice di Matt Zandstra. Questo è il libro che per primo mi ha insegnato come usare OOP in modo efficace, piuttosto che insegnarmi solo la sintassi. Avevo imparato la sintassi anni prima, ma era inutile senza capire il "perché" di OOP.


3
Il libro raccomandato nella modifica di questo post è davvero molto eccellente. Il pezzo che finora ho dimostrato è stato abbastanza illuminante. I primi capitoli hanno risposto alla maggior parte delle mie domande relative alla classe.
Giosia il

I libri che mi hanno permesso di capire davvero gli oggetti, senza affollare il mio pensiero con dettagli non necessari, come esempi in Smalltalk, sono stati di David A Taylor, essendo la tecnologia orientata agli oggetti: una guida del manager e ingegneria aziendale con tecnologia degli oggetti . Entrambe sono solo 100 pagine e ognuna è abbastanza facile da leggere in un pomeriggio. Naturalmente, ci sono i modelli di progettazione di Gamma et al , sebbene l'approccio di base possa essere semplicemente descritto da "sottoclasse di ciò che si desidera variare".
Patanjali,

Un'analogia molto bella. Ne hai uno per protetto vs privato?
Jānis Elmeris,

79

private - è possibile accedere solo ENTRO la classe

protected - è possibile accedere dalle classi ENTRO e INERITING

public - è possibile accedere anche dal codice ESTERNO alla classe

Questo vale sia per le funzioni che per le variabili.


Non sono sicuro che la definizione protetta sia corretta qui, dalla risposta effettivamente selezionata sembra Protetto: è possibile accedervi solo dalla classe ereditata in poi e non dalla classe originale / genitore. Dire "ENTRO la classe" può essere un po 'confuso.
pal4life,

7
Non credo, in effetti sembra che la risposta selezionata sia quella che confonde qui. Vedi il commento di Shahids. IMHO un metodo protetto è ben accessibile dall'interno della classe originale.
Olaf,

una classe può accedere al pubblico di un'altra classe?
Serjas,

1
@Serjas: No, solo un altro oggetto, a meno che non siano metodi / campi statici.
DanMan,

Non so se questo si applica a tutti i linguaggi di programmazione, ma in PHP è possibile accedere a proprietà / metodi "protetti" sia nella classe in cui è stata dichiarata, sia nelle classi che ereditano dalla classe che definisce la proprietà / metodo.
John Slegers,

25

La differenza è la seguente:

Public :: Una variabile pubblica o un metodo sono accessibili direttamente da qualsiasi utente della classe.

Protected :: Una variabile o un metodo protetto non sono accessibili agli utenti della classe ma sono accessibili all'interno di una sottoclasse che eredita dalla classe.

Private :: Una variabile o un metodo privati ​​sono accessibili solo internamente dalla classe in cui sono definiti. Ciò significa che una variabile o un metodo privati ​​non possono essere chiamati da un figlio che estende la classe.


17

Ambiti di visibilità con esempi astratti :: Facilita la comprensione

Questa visibilità di una proprietà o di un metodo è definita dalla dichiarazione pre-fissata di una delle tre parole chiave (pubblica, protetta e privata)

Pubblico : se una proprietà o un metodo è definito come pubblico, significa che può essere sia accesso che manipolato da tutto ciò che può riferirsi all'oggetto.

  • Estratto ad es. Pensa che l'ambito di visibilità pubblica sia un "picnic pubblico" a cui chiunque può arrivare.

Protetto: quando la visibilità di una proprietà o di un metodo è impostata su membri protetti, è possibile accedere solo all'interno della classe stessa e dalle classi ereditate ed ereditate. (Ereditato: - una classe può avere tutte le proprietà e i metodi di un'altra classe).

  • Pensa come un ambito di visibilità protetta come "picnic aziendale" in cui i membri dell'azienda e i loro familiari non sono autorizzati al pubblico. È la limitazione dell'ambito più comune.

Privato: quando la visibilità di una proprietà o di un metodo è impostata su privata, solo la classe che ha i membri privati ​​può accedere a tali metodi e proprietà (internamente alla classe), indipendentemente da qualunque relazione di classe vi sia.

  • con l'analogia del picnic, pensa come un "picnic aziendale dove sono ammessi solo i membri dell'azienda" nel picnic. non sono ammessi né la famiglia né il pubblico.

15
/**
 * Define MyClass
 */
class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // We can redeclare the public and protected method, but not private
    protected $protected = 'Protected2';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Protected2, Undefined

Estratto da :

http://php.net/manual/en/language.oop5.visibility.php


12

⚡️ Ecco un modo semplice per ricordare lo scopo di public, protectede private.

PUBLIC:

  • public ambito: una variabile / funzione pubblica è disponibile per oggetti e altre classi.

PROTECTED:

  • protected ambito: una variabile / funzione protetta è disponibile per tutte le classi che estendono la classe corrente.
  • No! Gli oggetti non possono accedere a questo ambito

PRIVATE:

  • private ambito: una variabile / funzione privata è visibile solo nella classe corrente in cui viene definita.
  • No! La classe che estende la classe corrente non può accedere a questo ambito.
  • No! Gli oggetti non possono accedere a questo ambito.

Leggi la visibilità di un metodo o di una variabile sul manuale di PHP.


9

Considerando " quando ":
inizialmente tendo a dichiarare tutto come privato, se non sono esattamente sicuro. Il motivo è che di solito è molto più facile rendere pubblico un metodo privato rispetto al contrario. Questo perché puoi almeno essere sicuro che il metodo privato non sia stato usato da nessuna parte ma nella classe stessa. Un metodo pubblico potrebbe essere già in uso ovunque, probabilmente richiedere una riscrittura approfondita.

Aggiornamento : vado per impostazione predefinita al protectedgiorno d' oggi, perché sono arrivato a scoprire che è abbastanza buono per l'incapsulamento e non mi intrometto quando sto estendendo le classi (che cerco comunque di evitare). Solo se ho una buona ragione per usare gli altri due, lo farò.

Una buona ragione per un privatemetodo sarebbe quella che implementa qualcosa di inerente a quell'oggetto che anche una classe che si estende non dovrebbe cambiare (ragione fattuale, oltre all'incapsulamento, come la gestione interna dello stato). Alla fine, è ancora abbastanza facile rintracciare dove un protectedmetodo viene utilizzato di solito, quindi per impostazione predefinita al protectedgiorno d'oggi. Forse non un'esperienza al 100% oggettiva "nelle trincee", lo ammetto.


3
Con il tuo aggiornamento: puoi chiarire in che modo "abbastanza buono" e "buon motivo" vanno insieme qui? Ad esempio, usare privatesarebbe ancora "abbastanza buono" da usare, ma non suggerisci che, anche se i motivi precedenti che hai dato sembrano ancora una "buona ragione": l'incapsulamento.
hakre,

@hakre: il motivo per cui dovremmo lottare per l'incapsulamento è quello di evitare perdite di stato nello scopo esterno. protectedlo fa già, ma lo mantieni flessibile per estensione / eredità. Ancora una volta, a meno che tu non abbia una buona ragione per farlo private.
DanMan,

Bene, questo è probabilmente il punto in cui non siamo d'accordo: in protectedrealtà trapelano nell'ambito esterno ed è spesso sulla tua strada poiché supporta cattive decisioni di progettazione come favorire implicitamente l'eredità mentre è meglio favorire la composizione. Ecco perché attenersi al privato a meno che non si disponga di requisiti effettivi per non farlo è spesso un modo migliore per iniziare a scrivere codice. Ciò impedirà anche di prendere decisioni di progettazione troppo presto mentre in realtà non sono ancora necessarie.
Hacre,

Non discuterò del tuo punto generale, perché è abbastanza giusto, ma protectednon perde nel campo di applicazione esterno (codice che chiama / accede al metodo / campo) ma solo ambito interno (estendere le classi). C'è una differenza, per quanto minore possa essere per te. È molto più facile rintracciare l'utilizzo di un protectedcampo piuttosto che publicuno.
DanMan,

6

Il manuale di PHP ha una buona lettura della domanda qui .

La visibilità di una proprietà o metodo può essere definita prefissando la dichiarazione con le parole chiave pubbliche, protette o private. I membri della classe dichiarati pubblici sono accessibili ovunque. I membri dichiarati protetti sono accessibili solo all'interno della classe stessa e dalle classi ereditate e parent. I membri dichiarati come privati ​​possono accedere solo alla classe che definisce il membro.


6

Per me, questo è il modo più utile per comprendere i tre tipi di proprietà:

Pubblico : utilizzalo quando sei a posto con l'accesso diretto e la modifica di questa variabile da qualsiasi parte del codice.

Esempio di utilizzo dall'esterno della classe:

$myObject = new MyObject()
$myObject->publicVar = 'newvalue';
$pubVar = $myObject->publicVar;

Protetto : usalo quando vuoi forzare altri programmatori (e te stesso) ad usare getter / setter al di fuori della classe quando accedi e setti variabili (ma dovresti essere coerente e usare anche getter e setter all'interno della classe). Questo o privatetende ad essere il modo predefinito di impostare tutte le proprietà della classe.

Perché? Perché se in futuro deciderai (forse anche in circa 5 minuti) che vuoi manipolare il valore che viene restituito per quella proprietà o fare qualcosa con essa prima di ottenere / impostare, puoi farlo senza refactoring ovunque tu abbia usato nel tuo progetto.

Esempio di utilizzo dall'esterno della classe:

$myObject = new MyObject()
$myObject->setProtectedVar('newvalue');
$protectedVar = $myObject->getProtectedVar();

Privato : le privateproprietà sono molto simili alle protectedproprietà. Ma la caratteristica / differenza distintiva è che renderlo privateinaccessibile anche alle classi figlio senza usare il getter o il setter della classe genitore.

Quindi, fondamentalmente, se stai usando getter e setter per una proprietà (o se è usata solo internamente dalla classe genitore e non è pensata per essere accessibile altrove) potresti anche farcela private, solo per impedire a chiunque di provare per usarlo direttamente e introdurre bug .

Esempio di utilizzo all'interno di una classe figlio (che estende MyObject):

$this->setPrivateVar('newvalue');
$privateVar = $this->getPrivateVar();


4

Le variabili in PHP sono espresse in tre diversi tipi:

Pubblico: i valori di questi tipi di variabili sono disponibili in tutti gli ambiti e richiedono l'esecuzione del codice. dichiarare come:public $examTimeTable;

Privato: i valori di questo tipo di variabile sono disponibili solo per la classe a cui appartiene. private $classRoomComputers;

Protetto: i valori di questa classe sono disponibili solo quando Access è stato concesso in una forma di eredità o nella loro classe figlio. generalmente utilizzato ::per garantire l'accesso per classe genitore

protected $familyWealth;


3

Rianimare una vecchia domanda, ma penso che un ottimo modo per pensarci sia in termini di API che stai definendo.

  • public - Tutto ciò che è contrassegnato come pubblico fa parte dell'API che chiunque utilizzerà la tua classe / interfaccia / altro utilizzerà e farà affidamento.

  • protected- Non farti ingannare, anche questo fa parte dell'API! Le persone possono sottoclassare, estendere il codice e utilizzare qualsiasi cosa contrassegnata come protetta.

  • private- Le proprietà e i metodi privati ​​possono essere modificati a piacere. Nessun altro può usarli. Queste sono le uniche cose che puoi cambiare senza apportare modifiche sostanziali.

O in termini semver :

  • Modifiche a qualsiasi cosa publico protecteddevono essere considerate modifiche PRINCIPALI.

  • Qualsiasi cosa nuova publico protecteddovrebbe essere (almeno) MINORE

  • Solo le novità / modifiche a qualsiasi cosa privatepossono essere PATCH

Quindi, in termini di mantenimento del codice, è bene fare attenzione a ciò che fai publico protectedperché sono le cose che prometti ai tuoi utenti.


1

Quando seguiamo php orientato agli oggetti nel nostro progetto, dovremmo seguire alcune regole per usare i modificatori di accesso in php. Oggi impareremo chiaramente cos'è il modificatore di accesso e come possiamo usarlo. I modificatori di accesso PHP vengono utilizzati per impostare i diritti di accesso con le classi PHP e i loro membri che sono le funzioni e le variabili definite nell'ambito della classe. In php ci sono tre ambiti per i membri della classe.

  1. PUBBLICO
  2. PRIVATO
  3. PROTETTA

Ora diamo un'occhiata alla seguente immagine per capire il livello di accesso al modificatore di accesso inserisci qui la descrizione dell'immagine

Ora diamo un'occhiata al seguente elenco per conoscere le possibili parole chiave PHP utilizzate come modificatori di accesso.

pubblico: - la classe oi suoi membri definiti con questo modificatore di accesso saranno accessibili pubblicamente da qualsiasi luogo, anche al di fuori dell'ambito della classe.

privato: - i membri della classe con questa parola chiave saranno accessibili all'interno della classe stessa. non possiamo accedere ai dati privati ​​dalla sottoclasse. Protegge i membri dall'accesso di classe esterna.

protetto: - uguale a privato, tranne consentendo alle sottoclassi di accedere ai membri protetti della superclasse.

Ora vedi la tabella per capire il modificatore di accesso Leggi l'articolo completo php modifica l' accesso


1

Public: è uno stato predefinito quando si dichiara una variabile o un metodo, è possibile accedervi da qualsiasi cosa direttamente all'oggetto.

Protected: È possibile accedervi solo all'interno dell'oggetto e delle sottoclassi.

Private: Può essere referenziato solo all'interno dell'oggetto, non sottoclassi.


0

Le parole chiave menzionate sono modificatori di accesso e ci aiutano a implementare l'incapsulamento (o nascondere le informazioni). Indicano al compilatore quali altre classi dovrebbero avere accesso al campo o al metodo da definire.

privato: solo la classe corrente avrà accesso al campo o al metodo.

protetto - Solo la classe e le sottoclassi correnti (e talvolta anche le classi dello stesso pacchetto) di questa classe avranno accesso al campo o al metodo.

public: qualsiasi classe può fare riferimento al campo o chiamare il metodo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.