Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-11-2009, 10:42   #1
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
[PHP] Domandina sull'uso della keyword $this

Ciao,
in questi giorni stò studiandomi PHP OO, vengo da Java...

Da quello che mi ricordo in Java il this lo si usa per indicare che ci si stà riferendo ad una variabile di istanza dell'oggetto che si stà usando in quel momento. In Java mettere this davanti alla variabile di istanza è facoltativo...se non lo si mette ci si riferisce automaticamente a quella...mi sembra di capire che in PHP non sia così, giusto?

L'altra cosa che mi ha confuso le idee è stato leggere sulla guida di HTML.it a PHP OO (quì: http://php.html.it/guide/lezione/41...la-classe-this/) la seguente frase: "Questo è un concetto di fondamentale importanza, che ci permette di accedere alle varie componenti (pubbliche) della classe direttamente dal suo interno."

Cosa mi sta dicendo? che posso usare $this solo davanti a variabili di istanza dichiarate come public ?!?! In Java non è affatto così...anzi da quel poco che sò di programmazione OO la professoressa ci ha spaccato la testa che le variabili di istanza devono sempre essere dichiarate private per nascondere l'implementazione all'utente che poi userà la classe (information hiding) e che l'utente dovrà poter operare con la classe solamente attraverso la sua interfaccia (l'insieme dei metodi public)

Come mai quì mi dice che posso usare $this solo davanti alle variabili di istanza pubbliche ?!?! Mi sembra un po' un controsenso...

Grazie a tutti
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 10:48   #2
vhost87
Senior Member
 
L'Avatar di vhost87
 
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
Quote:
Originariamente inviato da e-commerce84 Guarda i messaggi
Ciao,
in questi giorni stò studiandomi PHP OO, vengo da Java...

Da quello che mi ricordo in Java il this lo si usa per indicare che ci si stà riferendo ad una variabile di istanza dell'oggetto che si stà usando in quel momento. In Java mettere this davanti alla variabile di istanza è facoltativo...se non lo si mette ci si riferisce automaticamente a quella...mi sembra di capire che in PHP non sia così, giusto?

L'altra cosa che mi ha confuso le idee è stato leggere sulla guida di HTML.it a PHP OO (quì: http://php.html.it/guide/lezione/41...la-classe-this/) la seguente frase: "Questo è un concetto di fondamentale importanza, che ci permette di accedere alle varie componenti (pubbliche) della classe direttamente dal suo interno."

Cosa mi sta dicendo? che posso usare $this solo davanti a variabili di istanza dichiarate come public ?!?! In Java non è affatto così...anzi da quel poco che sò di programmazione OO la professoressa ci ha spaccato la testa che le variabili di istanza devono sempre essere dichiarate private per nascondere l'implementazione all'utente che poi userà la classe (information hiding) e che l'utente dovrà poter operare con la classe solamente attraverso la sua interfaccia (l'insieme dei metodi public)

Come mai quì mi dice che posso usare $this solo davanti alle variabili di istanza pubbliche ?!?! Mi sembra un po' un controsenso...

Grazie a tutti
Perché non potresti accedere a quelle private e protette al di fuori dell'istanza di classe... per questo motivo ti dicono che $this lo utilizzi per accedere a istanze pubbliche.
__________________
IT Developer at Hardware Upgrade S.r.l.
self.love(this.me());
vhost87 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 10:54   #3
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Quote:
Originariamente inviato da michele.broggi Guarda i messaggi
Perché non potresti accedere a quelle private e protette al di fuori dell'istanza di classe... per questo motivo ti dicono che $this lo utilizzi per accedere a istanze pubbliche.
Ok...ma fammi capire...

Se io voglio accedere ad una variabile privata all'interno della classe stessa posso farlo, giusto?

Esempio:

Codice:
<?php

class MyClass{
      private $a = "Ciao";
      
      public function stampa(){
             echo $this->a;
      }
}

?>
Dovrebbe funzionare giusto?

La variabile $a è privata e non voglio far sapere all'utente che usa la mia classe com'è implementata...gli fornisco solo un metodo pubblico (l'interfaccia della mia classe) che stampa il contenuto di $a

L'utente può usare il metodo publico stampa() e tale metodo può stampare il contenuto della variabile $a perchè è interno alla mia classe

In Java è così...in PHP?

Grazie

Ultima modifica di e-commerce84 : 08-11-2009 alle 10:56.
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 11:05   #4
Torav
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 558
Si, è esattamente come dici. Penso che il passo della guida che citi sia errato o scritto male!
Torav è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 11:15   #5
vhost87
Senior Member
 
L'Avatar di vhost87
 
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
Quote:
Originariamente inviato da Torav Guarda i messaggi
Si, è esattamente come dici. Penso che il passo della guida che citi sia errato o scritto male!
Concordo.

Per ecomm84 si, se tu vuoi accedere ad un qualsiasi metodo, tipo di dato, ecc... interno alla classe, che sia privato, protetto o public si usa l'operatore $this->.

Se vuoi accedere esternamente, puoi farlo solo per metodi pubblici e (privati qualora la classe fosse astratta ed ereditata); se è protetto non ci accedi dall'esterno della classe.

In Java non esiste il this o meglio, si omette senza problemi (infatti è una cosa molto comoda ma poco chiara e abbastanza ambigua).
__________________
IT Developer at Hardware Upgrade S.r.l.
self.love(this.me());
vhost87 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 11:26   #6
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Quote:
Originariamente inviato da michele.broggi Guarda i messaggi
Concordo.

Per ecomm84 si, se tu vuoi accedere ad un qualsiasi metodo, tipo di dato, ecc... interno alla classe, che sia privato, protetto o public si usa l'operatore $this->.

Se vuoi accedere esternamente, puoi farlo solo per metodi pubblici e (privati qualora la classe fosse astratta ed ereditata); se è protetto non ci accedi dall'esterno della classe.

In Java non esiste il this o meglio, si omette senza problemi (infatti è una cosa molto comoda ma poco chiara e abbastanza ambigua).
Ok...allora è come avevo capito...mo tocca fa girare i miei esempietti ahaha
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 11:59   #7
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da e-commerce84 Guarda i messaggi
Ok...ma fammi capire...

Se io voglio accedere ad una variabile privata all'interno della classe stessa posso farlo, giusto?

Esempio:

Codice:
<?php

class MyClass{
      private $a = "Ciao";
      
      public function stampa(){
             echo $this->a;
      }
}

?>
Dovrebbe funzionare giusto?

La variabile $a è privata e non voglio far sapere all'utente che usa la mia classe com'è implementata...gli fornisco solo un metodo pubblico (l'interfaccia della mia classe) che stampa il contenuto di $a

L'utente può usare il metodo publico stampa() e tale metodo può stampare il contenuto della variabile $a perchè è interno alla mia classe

In Java è così...in PHP?

Grazie
Scusa ma fare una prova invece di chiedere? Una prova del genere quanto tempo prende...20 secondi a dir tanto?
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 12:00   #8
vhost87
Senior Member
 
L'Avatar di vhost87
 
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Scusa ma fare una prova invece di chiedere? Una prova del genere quanto tempo prende...20 secondi a dir tanto?
Di meno, però penso che l'utente volesse una raccomandazione teorica sul problema.
__________________
IT Developer at Hardware Upgrade S.r.l.
self.love(this.me());
vhost87 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 12:36   #9
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Diciamo che volevo una cosa teorica perchè stò impazzendo !!!
Nell'esempio banale avevo provato ed infatti funziona...

Quì invece NON FUNZIONA PIU' !!! Ci sarà qualche altro genere di problema che non capisco...

Codice:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

/* Classe che implementa la struttura dati HEAP e la sua funzionalità per
   l'ordinamento di una collezione mediante l'algoritmo di ordinamento
   Heap Sort */

 class Heap{
 	
 	/* Variabile di istanza che implementa la struttura dati ad albero dell'heap per mezzo di 
	   un array */
 	private $heap = array();
 	private $heapSize;			// Variabile di istanza che conterrà la dimensione dell'heap
 	
 	/* COSTRUTTORE: Copia l'array parametro nella variabile di istanza heap e mette dentro
	   la variabile di istanza heapSize la sua dimensione */
    
    public function __construct($arr){
    	$heapSize = count($arr);	// Mette dentro heapSize la dimensione dell'array parametro'
    	$this->heap = $arr;			// Copia l'array parametro nella variabile di istanza heap'
   	}
   	
   	public function getDimensione(){
   		return $this->heapSize;		// Restituisce al chiamante il valore contenuto in heapSize
   	}
   	
}

$array = array(80, 70, 90);
$myHeap = new Heap($array);
$dimensione = $myHeap->getDimensione(); 
echo "La dimensione dell'heap è: ". $dimensione;  	

?>
Praticamente ho un costruttore che riceve un array come parametro e lo copia nel mio array di istanza chiamato heap.
Poi mette la dimensione dell'array parametro nell'altra variabile di istanza chiamata heapSize.
L'oggetto così dovrebbe essere creato.

Poi nella classe metto un metodo pubblico per la mia interfaccia chiamato getDimensione che dovrebbe restituire al chiamante il valore contenuto nella variabile di istanza privata heapSize...

Provato...ma non lo fà...non mi restituisce nulla...credo che alcuni dei problemi di ieri dipendessero anche da problemi analoghi...ora stò tentando di rompermi la testa per capire bene su cose più piccole...please help me

Come mai?

Grazie
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 12:44   #10
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Devi usare il $this per accedere alla variabile $heapSize.
Codice PHP:
public function __construct($arr){
        
$heapSize count($arr);    // Mette dentro heapSize la dimensione dell'array parametro'
        
$this->heap $arr;            // Copia l'array parametro nella variabile di istanza heap'

Qui $heapSize ha visibilità solo nel costruttore, non è la tua variabile privata.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 12:51   #11
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
O... risolto

Cmq ultimo dubio...$this lo uso solamente per accedere alle variabili di istanza (da dentro alla classe) o ai metodi privati della classe?
Giusto?
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 12:53   #12
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Esatto, dici che vieni da java, allora è come java solo che è obbligatorio.
Dove in java puoi accedere con this, qui DEVI accedere con this.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 12:55   #13
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Esatto, dici che vieni da java, allora è come java solo che è obbligatorio.
Dove in java puoi accedere con this, qui DEVI accedere con this.
Si cmq stò fuori di testa...sarà che ho passato troppe ore davanti al PC tra ieri ed oggi...in Java anche se non è obbligatorio i this li mettevo sempre per motivi di chiarezza...in PHP me li dimentico SEMPRE !!!
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 12:57   #14
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da e-commerce84 Guarda i messaggi
Si cmq stò fuori di testa...sarà che ho passato troppe ore davanti al PC tra ieri ed oggi...in Java anche se non è obbligatorio i this li mettevo sempre per motivi di chiarezza...in PHP me li dimentico SEMPRE !!!
hehe succede, prenditi una pausa magari che il tuo lavoro ne gioverà di sicuro.
In questi casi si perde più tempo su errori banali che altro.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 12:58   #15
vhost87
Senior Member
 
L'Avatar di vhost87
 
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Esatto, dici che vieni da java, allora è come java solo che è obbligatorio.
Dove in java puoi accedere con this, qui DEVI accedere con this.
Esatto... forse PHP è piu chiaro e meno ambiguo sotto questo aspetto!
__________________
IT Developer at Hardware Upgrade S.r.l.
self.love(this.me());
vhost87 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 13:06   #16
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Quote:
Originariamente inviato da michele.broggi Guarda i messaggi
Esatto... forse PHP è piu chiaro e meno ambiguo sotto questo aspetto!
hehe si...poi però venendo da Java rimani sconvolto dal poter assegnare ad una variabile prima una stringa,poi un array e poi un int hehe
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 13:13   #17
vhost87
Senior Member
 
L'Avatar di vhost87
 
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
Quote:
Originariamente inviato da e-commerce84 Guarda i messaggi
hehe si...poi però venendo da Java rimani sconvolto dal poter assegnare ad una variabile prima una stringa,poi un array e poi un int hehe
Eh si Java è fortemente tipizzato, PHP direi un pò meno
Ma sono i pro e contro dei linguaggi a tipizzazione dinamica
__________________
IT Developer at Hardware Upgrade S.r.l.
self.love(this.me());
vhost87 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 13:13   #18
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Se vuoi rimanere veramente sconvolto in quel senso dovresti provare javascript allora
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 13:21   #19
vhost87
Senior Member
 
L'Avatar di vhost87
 
Iscritto dal: Apr 2008
Città: Varese
Messaggi: 406
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Se vuoi rimanere veramente sconvolto in quel senso dovresti provare javascript allora
CONCORDO!
__________________
IT Developer at Hardware Upgrade S.r.l.
self.love(this.me());
vhost87 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 13:52   #20
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
hehe notavo ora una cosa carina degli array in PHP (francamente non me l'aspettavo...in C ed in Java non è così e te lo devi gestire a mano tali situazioni).

Se io inizializzo un array a partire dalla cella di indice 1 e non dalla cella di indice 0...lui l'array lo vede sempre di 3 locazioni...tranne che mi sembra di capire che considera la locazione 1 come la prima (invece della 0 come in C o in Java che sarebbe stata lasciata "vuota"...anzi in C ci sarebbe proprio il contenuto di ciò che c'era prima in memoria...con rischi di bei casini...)

Se come costruttore uso:

Codice:
public function __construct($arr){
    	
    	for($i=0; $i<count($arr); $i++)
    		$this->heap[$i+1] = $arr[$i];
    		
   		$this->heapSize = count($this->heap);// Mette dentro heapSize la dimensione dell'array parametro
   		print_r($this->heap);
   	}
Mi visualizza: Array ( [1] => 80 [2] => 70 [3] => 90 )

Simpatica questa cosa...può essere decisamente prativa :-)
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
Metroid Prime Beyond: arriva un trailer ...
Fujifilm GFX Eterna 55: una soluzione co...
Stardew Valley arriva su Switch 2: una c...
E-bike fat legale con "pulsante mag...
Nintendo Virtual Boy: l'accessorio per S...
Popucom si presenta come uno dei miglior...
Super Mario Galaxy il film: l'idraulico ...
Stellantis, contro risposta a BYD: "...
Microsoft evita una sanzione in Europa p...
TCL a IFA 2025: TV Mini LED, smartphone ...
Neanche la politica è salva: l'Al...
I nuovi Pixel 10 in mostra a Milano con ...
Perplexity di nuovo in tribunale: Merria...
AirPods 4 al minimo su Amazon: la versio...
Sam Altman sempre più convinto: l...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:58.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v