operatore ::

oscar

Nuovo Utente
17 Apr 2014
29
0
1
Salve a tutti, come da titolo, cerco informazione sull'operatore (credo sia un'operatore) "::" , l'ho visto in alcune guide ma francamente non ho capito cosa fa o in quale modo è usato. Se qualcuno mi sa dare una spiegazione (non copia-incolla da guida inglese) lo ringrazio.
 

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Per quanto ne so ( almeno io le uso per questo ) servono per accedere alle proprietà, metodi di tipo static o alle costanti di classe. Ora sono dal cell, magari appena ho un po' di tempo ti posto qualche esempio di codice che chiarisce meglio la cosa.
Se qualcuno conosce altri utilizzi aggiunga pure.


Saluti.
G.G.
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
due esempi con operatore :: e ->
PHP:
$format = 'j-M-Y';
$DateTime = DateTime::createFromFormat($format, '25-Oct-2015');
echo "Format : " . $format ." " . $DateTime->format('e Y-m-d H:i:s')."<br />";

$format = 'Y-m-d H:i:s';
$DateTime = DateTime::createFromFormat($format, '2015-10-25 15:16:17');
echo "Format : " . $format ." " . $DateTime->format('Y-m-d H:i:s')."<br />";
risultato
Format : j-M-Y Europe/Rome 2015-10-25 01:30:28 prende ora corrente
Format : Y-m-d H:i:s 2015-10-25 15:16:17 prende ora inserita
 

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Ecco qualche esempio chiarificatore

Ho preso spunto da questa pagina: http://www.html.it/pag/18348/i-metodi-statici/ aggiungendo dei dai per analizzare i vari casi in cui è possibile utilizzare l’operatore di risoluzione dell’ambito (“::”);

- con i dati dinamici (proprietà e metodi) occorre utilizzare la pseudo variabile $this per riferirsi agli elementi dall’interno della classe, mentre si deve utilizzare il namespace dell’istanza per riferirsi dall’esterno. L’operatore da utilizzare in entrambi i casi è l’operatore di deferenziamento (“->”)

- con i dati statici (costanti, proprietà statiche e metodi statici) occorre utilizzare l’operatore di risoluzione dell’ambito (“::”) unito al nome della classe che li contiene oppure alla keyword self

Ho preparato un esempio sempre partendo da quello proposto nella pagina indicata:
PHP:
<?php 
class MyClass {
	
	// proprietà statiche
	static $miavar = 10;
	
	//costante di classe
	const ROSSO = "Rosso";
	
 
        // metodi statici
        public static function sayHello() {
                echo "Hello!";
        }
        
 //in questo caso self viene utilizzato "all'interno della classe" per indicare la classe stessa, in sostituzione cioè di "MyClass". Avrei potuto scrivere MyClass::sayHello(); ma per comodità scrivo self::sayHello();
        public static function sayHelloAgain() {
                self::sayHello();
                echo " Again!";
        }
 
}
// stampa proprietà statiche
//stampa "10"
echo MyClass::$miavar;

// stampa costante di classe
//stampa "Rosso"
echo MyClass::ROSSO;

// stampa metodi statici 
// stampa "Hello!"
MyClass::sayHello();
 
// stampa "Hello! Again!"
MyClass::sayHelloAgain();

In questo caso per i metodi statici, sarebbe possibile accedervi anche in questo modo, ma è fortemente sconsigliato:

PHP:
// Istanzio la classe
$myClass_1 = new MyClass();
$myClass_2 = new MyClass();


// stampa "Hello!"
$myClass_1->sayHello();
 
// stampa "Hello! Again!"
$myClass_1->sayHelloAgain();
?>

Spero di aver chiarito il tuo dubbio.
 

Discussioni simili