Newsgroup: it.comp.www.php
Titolo: Procedura "poco ortodossa" con oggetto

Ciao a tutti,
Volevo provare a scrivere una classe che si "autoaggiorna" ad una classe estesa in 
base ad alcune condizioni.
E' venuto fuori questo. Se setto il flag a true in effetti la classe diventa beta.
Siccome questa "funzionalità" non è documentata, secondo voi è conveniente 
utilizzarla o è meglio che non lo faccia?
class alpha{
 
	function alpha($upgrade){
	$exvalue="boh!\r\n";
 
	if($upgrade){
		$this=new beta($init_value);
 
		}
 
	echo("will this be executed?\r\n");
	}
 
 
	function testme(){
		echo("actually i'm alpha\r\n$exvalue");
	}
}
class beta extends alpha{
 
	function beta($init){
		$this->init=$init;
		echo("and this will be executed?\r\n");
	}
 
	function testme(){
		echo("actually i'm beta\r\n$exvalue");
	}
}
$myClassAlpha = new alpha(true);
var_dump($myClassAlpha);
$myClassAlpha->testme();
-- 
L'indirizzo di posta non è valido! Per contattarmi in privato usate il form: 
http://www.gerry.it/serve/mail/
The mail address given is invalid, if you want to contact me, please use this form 
instead: 
http://www.gerry.it/serve/mail/
Se tutto nella vita sembra venirti incontro, probabilmente sei nella corsia 
sbagliata. (Zsa Zsa Gabor)

 classe estesa in base ad alcune condizioni.
L'idea di base e' relativamente semplice. In PHP4 gli oggetti vengono
gestiti in memoria come array di proprieta', quando scrivi "$this = new
beta ();" non fai altro che creare un nuovo "array" di tipo beta e
salvarlo in $this. Secondo me sarebbe meglio utilizzare un approccio
piu' OO sopratutto in vista dell'arrivo di PHP5.
Il tuo codice contiene dei notice:
Notice: Undefined variable: init_value in
D:\Lavoro\Projects\DoorGen\www\TMPcuasre7wh.php on line 9
and this will be executed? 
will this be executed? 
object(beta)(1) { ["init"]=> NULL } 
Notice: Undefined variable: exvalue in
D:\Lavoro\Projects\DoorGen\www\TMPcuasre7wh.php on line 30
actually i'm beta 
Segue versione rivedura e corretta:
<?php 
class alpha
{
	var $exvalue;
	function alpha($upgrade)
	{
		$this->exvalue = "boh!\r\n";
		if ($upgrade)
		{ $this = new beta (); }
		echo("will this be executed?\r\n");
	}
 
	function testme()
	{ echo ("actually i'm alpha\r\n" . $this->exvalue); }
}
class beta extends alpha
{
	var $exvalue;
	function beta($init = true)
	{
		$this->init = $init;
		echo("and this will be executed?\r\n");
	}
 
	function testme()
	{ echo("actually i'm beta\r\n" . $this->exvalue); }
}
$myClassAlpha = new alpha(true);
var_dump($myClassAlpha);
$myClassAlpha->testme();
?>
and this will be executed?
will this be executed?
object(beta)(2) {
  ["exvalue"]=>
  NULL
  ["init"]=>
  bool(true)
}
actually i'm beta
-- 
I'am what I'am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1

 piu' OO sopratutto in vista dell'arrivo di PHP5.
In che senso "più OO"? Tu che suggeriresti?
La mia idea era quella di creare un oggetto che rispecchi un utente le cui 
credenziali stanno in un DB. 
Al momento della creazione dell'oggetto questo esegue la procedura di 
autenticazione, in caso l'utente abbia grants amministrativi volevo che 
l'oggetto sostituisca se stesso con una sua estesione che contiene anche le 
funzioni amministrative.


 contiene anche le funzioni amministrative.
Dal mio punto di vista il sistema migliore potrebbe essere quello della
delega, segue esempio di codice:
<?php 
class grant_manager
{
	var $grant;
	function grant_manager($IDGrant = "guest")
	{
		$this->grant = NULL;
		switch ($IDGrant)
		{
			case "guest":
				$this->grant = new guest_grant ($IDGrant);
				break;
			case "admin":
				$this->grant = new admin_grant ($IDGrant);
				break;
			default:
				break;
		}
	}
}
class base_grant // hieracy base class
{
	var $_IDGrant; // pseudo class private
	function base_grant ($IDGrant = "base")
	{
		$this->IDGrant = $IDGrant;
		// other base initializations
	}
 
	function IDGrant()
	{ return $this->_IDGrant; }
 
	// other base methods
}
class guest_grant extends base_grant  
{
	function guest_grant ($IDGrant = "guest")
	{ parent::base_grant ($IDGrant); }
 
	// other guest methods
}
class admin_grant extends base_grant  
{
	function admin_grant ($IDGrant = "admin")
	{ parent::base_grant ($IDGrant); }
 
	function create_user ($user = "nobody", $passwd = "", $IDGrant =
"guest")
	{ 
		// create user code
		print ("Admin is creating user " . $user);
	}
 
	// other admin methods
}
 $grant_manager = new grant_manager ("admin");
 $grant_manager->grant->create_user ("pippo", "pippo123", "guest");
?>
