Problema con classi

Dunque ragazzi, nella classe seguente definisco i valori all'interno della classe stessa e poi li stampo tramite le funzioni secondarie. Ora mi chiedo, se io volessi recuperare il valore $Nome dall'esterno della classe come faccio per poi richiamarlo nelle funzioni secondarie?

class Classe {

var $Nome = 'A';
var $Cognome = 'B';

public function Principale() {
$this->SecondariaNome();
$this->SecondariaCognome();
}

public function SecondariaNome() {
echo "Nome: " . "<strong>" . $this->Nome . "</strong>" . "<br>";
}

public function SecondariaCognome() {
echo "Cognome: " . "<strong>" . $this->Cognome . "</strong>" . "<br>";
}

}

$Nome = new CLasse();
$Nome->Principale();
inviato 8 anni fa
Pixelate
X 0 X

Ciao, seconde me è difficile richiamare la variabile messa in quel modo, perchè dichiari che la variabile $nome e $cognome sono locali, ovvero girano solo nell'applicazione e non al di fuori di essa.

Prova togliere la costante var dalle due variabili, e forse le puoi avere anche all'esterno della classe.

Non sono un ingegnere informatico, per cui potrei anche sbagliare, ma tentare non nuoce no?

risposto 8 anni fa
Brascka
X 0 X

Brascka purtroppo quello che suggerisci è sbagliato, una classe non è una funzione.

Inoltre var non è una costante bensì una keyword.

Anche quello che chiede Pixelate, da quello che ho capito, non è realizzabile.

Non lo è perchè concettualmente si sta cercando di fare qualcosa che non è possibile/consentito fare.

Una classe è un tipo di dato, che consente di definire un "modello" che rappresenti un oggetto.

Oltre a definire il dato la classe può anche definire le azioni che possono essere compiute sul dato stesso.

Ad esempio, supponiamo di voler "modellare" un oggetto di tipo libro, il codice da scrivere sarebbe questo:

<?php
class Libro {
    //caratteristiche (attributi) del libro
    private $titolo;
    private $autore;
    private $prezzo;

    //metodi

    //costruttore,
    public function __construct($titolo, $autore, $prezzo)
    {
        $this->titolo = $titolo;
        $this->autore = $autore;
        $this->prezzo = $prezzo;
    }
    
    //questi metodi (funzioni della classe) permettono di ottenere il titolo, l'autore e il prezzo del libro
    public function getTitolo() 
    {
        return $this->titolo; 
    }

    public function getAutore() 
    {
        return $this->autore; 
     }

    public function getPrezzo() 
    {
        return $this->prezzo;
    }
}

//creo un libro
$libro = new Libro('Titolo del libro', 'Me', 35.90);

echo $libro->getTitolo(); //stampa "Titolo del libro"

a differenza di php4, dove si utilizzava la keyword var per definire un attributo della classe, in php5 è  possibile utilizzare 3 modificatori di accesso, ma in questo caso parleremo solo di due di essi, ovvero:

  • public
  • private

Public

Public (corrispondente a var, in php4) viene utilizzato per la definizione di attributi e metodi pubblici della classe.

Con pubblici si intende la possibilità di chiamare dall'esterno del contesto (o scopo) della classe quei membri ( i membri della classe corrispondono indistintamente sia agli attributi che ai metodi) che ne fanno parte:

$libro->titolo = 'Nuovo titolo'; 
//Non e' possibile perche' si cerca di accedere ad un membro PRIVATO della classe in scrittura.

echo $libro->titolo; 
//anche in caso di lettura, viene generato un errore.

//quindi per inizializzare gli attributi e' stato usato il costruttore, 
//una funzione che prende in ingresso il titolo, l'autore ed il prezzo del libro e valorizza gli attributi (dell'istanza).
$nuovoLibro = new Libro('Altro libro', 'Altro autore', 12.00);
//in seguito sono stati definiti dei metodi per accedere il lettura agli attributi del libro:
echo $nuvoLibro->getTitolo();

I metodi pubblici quindi sono adatti alla creazione dell'interfaccia dell'oggetto, l'interfaccia non è altro la "facciata" esterna dell'oggetto, che in qualche modo ci mostra cosa possiamo fare con quell'oggetto, e non come tale operazione è compiuta.

Private

Al contrario di public, private rende invisibili all'esterno i membri dichiarati come tali.

Attraverso i membri privati si realizza l'incapsulamento (information hiding).

I metodi privati servono a definire tutti i membri che non dovrebbero essere visibili all'esterno.

In questo caso gli attributi sono stati dichiarati privati proprio perchè rappresentano come l'oggetto libro è composto.

Immagina l'oggetto libro come una scatola nera, sai cosa ci puoi fare, ma non dovresti (o non ti serve sapere) come lo fa.

Ebbene, questo è il principio alla base della programmazione orientata agli oggeti.

Scusatemi se mi sono dilungato e spero di essere stato chiaro ^^

in caso di dubbi basta chiedere e vi sarà spiegato (più brevemente anche :P )

:bye:

Ps : Vi invito ridare un'occhiata al topic CLASSI PHP.

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

uhm.. si, sei stato molto chiaro, però vorrei chiederti una cosa riguardo all'attributo private,

quando anzichè essere private una variabile, è privata la funzione?

risposto 8 anni fa
Pixelate
X 0 X

il concetto di visibilità si applica ai membri della classe, come ti ho già detto con membri si indicano indifferentemente sia i metodi sia gli attributi.

Quindi un metodo privato è accessibile solo dall'interno della classe.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ok, quindi in breve, se dichiaro privata una classe, o una singola variabile, ottengo lo stesso risultato?

risposto 8 anni fa
Pixelate
X 0 X

Una classe?

Non mi sembra di aver parlato di dichiarare privata una classe.

Anche perchè in php una classe non ha modificatore di accesso.

Membri = metodi (funzioni della classe), attributi (variabili della classe).

Classe = Classe.

Privato vuol dire che il membro non è visibile all'esterno della classe.

Semplice.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda