Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-11-2009, 11: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, 11: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, 11: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 11:56.
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2009, 12: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, 12: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, 12: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, 12: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, 13: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, 13: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, 13: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, 13: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, 13: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, 13: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, 13: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, 13: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, 14: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, 14: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, 14: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, 14: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, 14: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


Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Segway Navimow presenta la nuova gamma d...
Xiaomi SU7 Pro: l'ispezione dopo 265.000...
Nimbus Innovation Awards 2026: le miglio...
SSD Samsung contraffatto, ma Windows e C...
Enrique Lores, CEO e presidente di HP, l...
SoftBank e Intel preparano la 'memoria d...
Il blocco dei porno per i minori è...
AMD: i nuovi processori Zen 6 saranno (i...
Ancora aumenti per le schede video Radeo...
Sonos presenta Amp Multi a ISE 2026: il ...
Una funzione esclusiva dei Pixel potrebb...
La Cina vieta ufficialmente le maniglie ...
HP e lavoro ibrido: le nuove cuffie Poly...
MSI sta lavorando a un dissipatore ottim...
27 offerte Amazon, le prime 5 in elenco ...
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:43.


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