Newsgroup: it.comp.www.php
Titolo: chiamata statica o tramite instanza

class Test {
	static function abc() {
		if (qualcosa()) {
			echo 'fai questo';
		}else{
			echo 'fai quello';
		}
	}
}
 
Test::abc(); // chiamata statica
$t=new Test; $t->abc(); // chiamata non statica (tramite istanza)
 
Al posto di *qualcosa()* esiste un'istruzione appropriata?

alex scriveva il 30/01/2016 :

Bho?
Mi sembra che si comporti un po' come gli pare!
 
<?php
class Test {
	static function abc() {
		if (function_exists('qualcosa')) {
			echo 'fai questo<br>';
		}else{
			echo 'fai quello<br>';
		}
 
 	}
 
 	static function abcd() {
 		if (property_exists('Test', 'qualcosa()')) {
 			echo 'fai questo<br>';
 		}else{
 			echo 'fai quello<br>';
 		}
 	}
 
 	static function abcde() {
 		if (method_exists('Test', 'qualcosa()')) {
 			echo 'fai questo<br>';
 		}else{
 			echo 'fai quello<br>';
 		}
 	}
 
 
 	public function qualcosa(){
 		$t = 1;
 	}
 
}
 
Test::abc(); // chiamata statica
$t=new Test; $t->abc(); // chiamata non statica (tramite istanza)
 
Test::abcd();
Test::abcde();
 
echo '<br>';
 
if (method_exists('Test', 'qualcosa')) {
	echo 'fai questo<br>';
}else{
	echo 'fai quello<br>';
}
 
 -----  Uscita
 fai quello
 fai quello
 fai quello
 fai quello
 
 fai questo
-----------------
 
Bye
 
-- 
Alex
 
--- news://
freenews.netfront.net/
 - complaints: 
ne...@netfront.net
 ---

 
 
Guarda che:
 
function_exists('qualcosa');
property_exists('Test', 'qualcosa()');
method_exists('Test', 'qualcosa()');
method_exists('Test', 'qualcosa');
 
fanno quattro cose diverse.
 
Per quello che stai cercando di fare la sintassi corretta è l'ultima.
 
Ciao!

Nel suo scritto precedente, 
fma...@gmail.com
 ha sostenuto :

Un metodo. L' ultima sintassi diventa anche la risposta alla domanda 
originale allora.
 
Io dicevo che fa quello che gli pare perchè ha due uscite che sembrano 
contradditorie. Si accorge che c'è la funzione solo nella terza 
richiesta.
 
<?php
class Test {
 	static function abcde() {
 		if (method_exists('Test', 'qualcosa()')) {
 			echo 'fai questo<br>';
 		}else{
 			echo 'fai quello<br>';
 		}
 	}
 
 
 	public function qualcosa(){
 		$t = 1;
 	}
 
}
 
Test::abcde();
$t = new Test();
$t->abcde();
 
echo '<br>';
 
if (method_exists('Test', 'qualcosa')) {
	echo 'fai questo<br>';
}else{
	echo 'fai quello<br>';
}
 
 
 -----  Uscita
 fai quello
 fai quello
 
 fai questo
 
Ciao !


 
 
No, la sintassi è "sbagliata": method_exists() prende il *nome* della funzione
 
method_exists('Test', 'qualcosa');
torna true
 
method_exists('Test', 'qualcosa()'); //(con le parentesi)
torna false
 
Ciao!


mi sa che siete andati fuori strada (riesaminate il post iniziale); per 
il momento ho risoltro sostituendo
 
qualcosa()
 
con
 
isset($this)
 
ma non so se c'è una soluzione più mirata...
 

 Ciao!
 
Ahio! Le parentesi dimenticate. Un errorino che ti può far perdere 
veramente un sacco di tempo a cercarlo ...
Ciao!


 ma non so se c'è una soluzione più mirata...
 
Perché non posti un frammento che si possa provare?
Bye



 
allora... lo riposto (con la modifica) va...
 
class Test {
     static function abc() {
         if (isset($this)) {// se la chiamata non è static
             echo 'fai questo';
         }else{
             echo 'fai quello';
         }
     }
}
 
Test::abc(); // chiamata statica
$t=new Test; $t->abc(); // chiamata non statica (tramite istanza)
 
Sembra funzioare, ma se al posto di isset($this) esistesse qualcosa di 
più mirato, tipo CALLING_IS_STATIC, sarebbe meglio...

 più mirato, tipo CALLING_IS_STATIC, sarebbe meglio...
 
Prova a togliere la keyword "static" davanti
alla function ed a controllare l'output.
 
 

 alla function ed a controllare l'output.
 
in effetti lo static va tolto, ma cmq a questo punto credo che l'unico 
modo per capire in che modo è stata richiamata la funzione sia isset($this)


 
Sorry, ho confuso i due "alex" :)
 
No no, la tua soluzione va benissimo: l'unica differenza tra una funzione
static e non static è il contesto di esecuzione.
 
Ciao!