Ciao,
sto cercando di far funzionare un pattern in modo che mi passi una variabile tramite un oggetto, ma a quanto pare questa non viene proprio vista, anche se non mi viene riportato un errore dal PHP.

In pratica sto implementando un'interfaccia in grado di selezionare un modello di database ( in PDO ) tramite un'implementazione dello Strategy Pattern.
Codice PHP:
//    iStrategy
    
interface iPDO_connect
    
{
        public function 
connect($user '');
    }
    
    
//    Context
    
class PDO_connect
    
{
        private 
$_strategy;
        
        public function 
__construct(iPDO_connect $strategy)
        {
            
$this->_strategy $strategy;
        }
        public function 
connect()
        {
            if (!isset(
$this->_strategy)) {
                return 
'';
            }
            
$this->_strategy->connect($this);
        }
    }
    
    
//    Concrete Strategy
    
class PDO_MySQL implements iPDO_Connect
    
{
        public function 
connect($user '')
        {
            try
            {
                if ( 
$user '') {
                    throw new 
Exception('L\'utente deve essere definito!');
                }
                
$dsn 'mysql:host=localhost;dbname=x;charset=utf8';
                
$password 'la mia pass';
                
$connection = new PDO($dsn$user$password);
                
$connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODEPDO::FETCH_OBJ);
                
$connection->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
                
$connection->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERYtrue);
                
$connection->setAttribute(PDO::ATTR_AUTOCOMMITtrue);
                
$connection->setAttribute(PDO::ATTR_EMULATE_PREPAREStrue);
                
                return 
$connection;
            }
            catch (
PDOException $e)
            {
                
$exception 'Exception! ' $e->getCode(). ': '$e->getMessage(). ' in '$e->getFile(). ' on line '$e->getLine(). "\n\n";;
                echo 
$exception;
                exit;
            }
        }
    } 
L'uso è banale e se voglio modificare il motore del database, ad esempio passare a sqlite o altro mi basta modificare la classe concrete strategy.
La chiamata è pure banale
Codice PHP:
$context = new PDO_connect(new PDO_MySQL());
$handle $context->connect('marco'); 
Ma l'errore che riporta non lo è
Exception! 1045: SQLSTATE[HY000] [1045] Access denied for user ''@'localhost' (using password: YES) in C:\WWW\Z\bin\PDO_connect.class.php on line 43
La linea 43 non è altro che
Codice PHP:
$connection = new PDO($dsn$user$password); 
Quindi?
Quindi sembra che la variabile $user non passa.
Inutile dire che se metto $user='marco' all'interno del metodo l'errore scompare a garantire il fatto che la procedura è giusta e l'errore non è nel PDO.
Quindi?