Newsgroup: it.comp.www.php
Titolo: Chiamare un metodo di una classe "direttamente" [php4]

Salve,
Allora ho questo problema:
Ho una classe X che esegue n-operazioni
metodo1,metodo2,metodo3
dentro un'altra pagina Y ho dei link )1,2,3,4,5,6 ecc.) io vorrei "fare" in 
modo che quando clicco sul link
mi chiami la pagina in cui è dichiarata la classe e poi mi chiami quel 
metodo.
in definitiva una alternativa a fare una cosa del genere:
link1 manda a pagina1 -> che dentro crea la classe X e chiama il metodo1
link2 manda a pagina2 -> che dentro crea la classe X e chiama il metodo2
cioè un file per ogni metodo un'altra cosa vorrei anche evitare di passare 
un parametro perchè
in questo modo sono obbligato a far conoscere ad Y e X i parametri da 
passare e questo complica le cose....
(un parametro per ogni metodo)
Secondo voi esiste una soluzione

 quel metodo.
http://www.php.net/call_user_func
http://www.php.net/call_user_func_array
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 -- 
Si conoscevo quelle funzioni (usate pochissimo) ma non so come potrei usarle 
per risolvere il mio problema

 usarle per risolvere il mio problema
Proof of concept da testare.
<a href="?class=myclass&method=Hello&params[]=setec">Call
myclass::Hello("setec")</a><br />
<a href="?class=myclass&method=Undefined&params[]=">Call
myclass::Undefined()</a><br />
<a href="?class=undefinedclass&method=test&params[]=">Call
undefinedclass::test()</a><br />
<?php // file exec.php
/* Class declaration/inclusion */
// include ('myclass.class.php'); 
class myclass {
 
	function Hello ($name = '') {
		print ("Hello $name!");
	}
}
/* Business logic */
if (isset ($_GET['class']) && 
    class_exists ($_GET['class'])) {
	if (isset ($_GET['method']) && 
	    in_array (strtolower ($_GET['method']), get_class_methods
($_GET['class']))) {
		$myclass = new $_GET['class'] ();
 
		if (isset ($_GET['params'])) {
			if (!is_array ($_GET['params'])) {
				$_GET['params'] = array ($_GET['params']);
			}
		} else {
			$_GET['params'] = array ();	
		}
 
		call_user_func_array (array (&$myclass, $_GET['method']), 
						      $_GET['params']);
	} else {
		die ("Undefined method!");
	}
} else {
	die ("Undefined class!");
}
?>


"Setec Astronomy" <setec@_NO_NOSPAM_freemail.it> ha scritto nel messaggio
news:RTiUd.53647$QG6.9...@twister2.libero.it...

Ok perfetto ma tua fai riferimento ad i metodi statici ma se volessi fare
riferimento ad una istanza ?
io ci sto provando ma ancora sono bloccato:
//file index.php
<?
echo "<a href=a.php?istanza='uno'&mehod='hello'>Metodo</a>";
?>
//file a.php
<?
class a {
 function a()  {
 }
 function hello() {
 echo "ciao";
 }
}
$uno = new a();
//call_user_func(array($uno, 'hello')); //lo metto fisso solo per prova.
Cosi'  funziona ma io devo usare $_GET['uno'] per fare la stessa cosa...
?>

 fare riferimento ad una istanza ?
Guarda meglio il codice, non sono metodi ma dell'istanza $myclass.



Hai ragione mia colpa!
interessante questa sintassi :
$myclass = new $_GET['class'] ();
:) in pratica qualsiasi cosa venga anteposta a () viene vista come nome di 
funzione ? 

 nome di funzione ? 
Nel caso specifico no e' proprio cosi', viene interpretato come il nome
della classe da istanziare tramite il costrutto new. La logica di
funzionamento e' la stessa di:
http://www.php.net/manual/en/language.variables.variable.php
