Newsgroup: it.comp.www.php
Titolo: Ridefinire le funzioni in php5...

Ciao a tutti.
Una domanda semplice: č possibile ridefinire le funzioni in php5 ?
Penso di sě, dato che č supportato il paradigma object-oriented. No?
E inoltre... č possibile farlo anche con le funzioni del linguaggio?
Chessň... vorrei ridefinire la funzione echo cosě:
function echo($stringa) {
	php.echo "Echo() ridefinita: $stringa ";
}
in modo tale che ogni volta che c'č una chiamate ad echo() nei miei
script, sia richiamata la mia echo(), che a sua volta chiama la echo()
"normale", quella del core di php.
E' possibile fare questa cosa?
Mi fate un breve esempio delle due cose, se possibili?
Grazie,
Kristie

 E' possibile fare questa cosa?
fai dei test e leggi il manuale..
IMHO no..
cmq..
function myecho ($str) {
  echo $str;
}
[..]
-- 
www.iuz-lab.info

 }
be', cosi' pero' dovrei cambiare tutti gli "echo" nei sorgenti con
"myecho". :-)
lo so che bastano un paio (una?) di righe di uno script per shell, ma
sarebbe carino che il developer avesse pieno controllo anche sulle
funzion... ops, costrutti del linguaggio, no? :)
grazie e buona serata,
K.

Kristie wrote:

[..]
non si possono ridefinire i costrutti..
non si possono ridefinire le funzioni gia' definite..
ed IMHO e' giusto cosi'..
se si vuole rendere possibile una operazione del genere bisogna procedere
come ti avevo indicato..
-- 
www.iuz-lab.info

 procedere come ti avevo indicato..
In teoria, quando si inizia l'implementazione di progetti medio/grandi
e' sempre meglio astrarre il "base livello" in modo da potersi meglio
adattare al cambiamento (es non usando echo/print ma una
funzione/classe custom).
-- 
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.

 
quoto..
una classe senza metodi apparte __call ed una per settare le relazioni tra
variabili puo' essere un buon metodo di 'centralizzazione' delle chiamate a
funzioni user-defined..
codice non testato e migliorabile..
[php]
class fc
{
  var $funcs_list = array();
  __add_func ($oMethod, $pMethod) 
  {
    $this->funcs_list[$oMethod] = $pMethod;
  }
  __call ($method, $args) 
  {
    if (function_exists($this->funcs_list[$method])) {
      return call_user_func_array($this->funcs_list[$method], $args);
    }
    return FALSE;
  }
}
[/php]
-- 
www.iuz-lab.info

 
quoto..
una classe senza metodi apparte __call ed una per settare le relazioni tra
funzioni puo' essere un buon metodo di 'centralizzazione' delle chiamate a
funzione user-defined..


 funzione/classe custom).
eh, appunto per questo chiedevo se si potessero ridefinire.
pensa che, stanco di uscire/entrare/uscire dalla modalita' php a quella
xhtml, ho scritto alcune semplici funzioni che mi permettono di non
uscire mai dalla modalita' php.
l'unica funzione/costrutto di php che uso ancora e', appunto la echo(),
e quindi, invece di cambiare gli script, volevo ridefinirla...
ah, un'altra considerazione: la die() senza possibilita' di essere
ridefinita e' praticamente inutile, se si vuole che il sito abbia un
aspetto decente anche quando accadono errori. per esempio, considera:
<div class='uno'>
  <div class='due'>
    <?php file_exists('nonesiste') or die('Non esiste!'); ?>
  </div>
  <div class='end'>
    Questo div non sarà visualizzato!
  </div>
</div>
Quando si dice che il codice si commenta da se'... ;-)
Ciao e grazie ad entrambi comunque!
K.

 errori. 
IMHO stai parlando senza conoscere le basi di programmazione e di
logica. Ogni costrutto/funzione ha un suo specifico comportamento ed
ambito di applicazione. Se tenti di usare die () dove, per logica, non
va usato, e' ovvio che per te risulti inutile.
<div class='uno'>
  <div class='due'>
    <?php if (file_exists('nonesiste')) { 
		/* do something */ 
	} else {
		echo ('Non esiste!');
	} ?>
  </div>
  <div class='end'>
    Questo div sarà visualizzato comunque!
  </div>
</div>
die () altro non e' che un alias di exit (). Se conosci le API standard
potrai ben capire quale e' l'ambito di applicazione di exit ().
-- 
I am what I am, I do what I can


 potrai ben capire quale e' l'ambito di applicazione di exit ().
appunto, die()/exit() non va mai usata quando stai creando i contenuti
delle pagine e hai dei tag aperti.
ovviamente puo' essere utile in altre situazioni, ma finora io ho
sempre: incluso la parte alta e le sezioni laterali, creato il contenuto
della pagina ed incluso la parte bassa. e mi e' stato subito chiaro che
la die() era concettualmente ottima (accade un errore per cui non puoi
continuare? esci stampando un msg d'errore), ma che in ambito xhtml non
poteva essere usata cosi' com'era (pagine invalidate ed esteticamente
pessime).
Ciao,
K.

 K.
se scrivi un programma e devi uscire ritornando un valore.. die($value);
e tecnicamente il termine di uno script non coincide necessariamente con
l'ultima riga dello stesso.. 
ma sicuramente una chiamata a exit() coincide col termine dello script..
-- 
www.iuz-lab.info

 ovviamente puo' essere utile in altre situazioni, 
[cut]
Cosa succede, stai cambiando rotta? Prima dicevi che non va mai usata,
ora che non va usata solo in certi casi, tra un po' cosa dirai, che va
usata solo da chi la sa usare?


 usata solo da chi la sa usare?
mai detto che (non) vada usata mai, e ti invito a quotarmi.
magari l'ho dimenticato, ma mi pare di aver sempre parlato
dell'inutilita' pratica della die(), quando ti resta ancora altro output
da inviare a video e devi presentare pagine xhtml-compliant. che poi
possa essere utile in situazioni diverse, e' ovvio.
comunque sia, lasciamo perdere. io preferirei un php con un ottimo
supporto OO, un framework come prado comprensivo di ambiente rad
(diverrebbe imho molto piu' popolare), una funzione die() meno inutile
di quella esistente, e cosi' via. se a te sta bene cosi', fa nulla. :-)
Ciao,
K.
PS. in realta', se ci pensi un attimo, in un istante puoi ribaltare
completamente a favore tuo il discorso sulla die()... :-)

 e chiuderli usando il parametro di die() e' una scelta..
oops! complimenti, iuz :)
hai davvero ottime capacita' di problem-solving. (e non solo per questa
banalita', ma anche per svariati tuoi post precedenti)
K.
PS. chiudiamo il thread, comunque: neppure se penso di aver ragione, mi
va di ribattere a due dei migliori poster di questo ng! :-)

 
[..]
[info]
exit() e' comunque una eccezione.. si puo' evitare di aggiornare tutti gli
script registrando la funzione da richiamare quando e' invocata..
register_shutdown_function('mydie');
[/info]
-- 
www.iuz-lab.info

 una funzione die() meno inutile di quella esistente, 
Solo perche' non sai usarla non significa che sia inutile ...


 [/info]
Il fatto e' che in questo modo mydie verrebbe chiamata comunque anche
in uno script non contenente alcuna chiamata a die/exit.


 
beh girando intorno al problema..
non e' di certo una soluzione 'pulita' quindi non incoraggio ad usarla.. 
ma all'evenienza funziona..
<?php
error_reporting(E_ALL);
$__END = FALSE;
register_shutdown_function('myDie', &$__END);
function myDie($__END) 
{
  if ($__END === TRUE)
    exit();
  echo "exiting by calling die or exit";
}
// die();
echo "exiting by arriving to script's end!";
$__END = TRUE;
?>
-- 
www.iuz-lab.info

 Piuttosto lapidaria direi.
dąi Setec... non ti abbassare a questi livelli.
se vuoi aver ragione in ogni caso, basta chiederlo.
chiudiamo qui, per favore. e' una discussione sterile e ot :)
Ciao,
K.

 il redirect ti porta comunque in un'altra pagina
falso. su alcuni browser l'header di redirect viene ignorato se dopo di
questo vengono inviati altri dati (caso che si verifica quando fai un
redirect in uno script che senza il die() echerebbe altro output)