Hi,
Friday, August 29, 2003, 3:01:45 AM, you wrote:
AM> I want to obtain only one instance of one class. In other to do that, I call
AM> to a static method, that creates the instance(if it doesnt exit) or returns
AM> the reference of the instance.
AM> The call to the static method is the next:
AM> $conexiondb=db::getInstancia();
AM> Well, but if I call to db::getInstancia() another time, I obtain another new
AM> object :-(
AM> The code of the db class is the next (it is a Singleton Pattern, but it
AM> doesnt work)
AM> class db{
AM> var $_miInstancia;
AM> function db (){
AM> // funcion que se conecta con la BBDD
AM> static $miInstancia;
AM> $this->_miInstancia=&$miInstancia;
AM> $result = @mysql_pconnect("inforalv", "discoteca", "password");
AM> if (!$result)
AM> return false;
AM> if ([EMAIL PROTECTED]("discoteca"))
AM> return false;
AM> }
AM> &function getInstancia(){
AM> if (!isset($this))
AM> $_miInstancia=new db();
AM> return $_miInstancia;
AM> }
AM> }
AM> I think that the problem is that the var _miInstance is not static and I
AM> dont know how to do it.
AM> Could you please tell me if there is anything wrong?
AM> Thanks.
AM> Alvaro
static calls to a class will never have $this set so you have to set
your reference globally something like this:
<?php
$_miInstancia = array();
class db{
var $c;
function db ($count=false){
global $_miInstancia;
$_miInstancia['db'] =& $this;
if($count)$this->c = $count;
// funcion que se conecta con la BBDD
$result = @mysql_pconnect("inforalv", "discoteca", "password");
if (!$result)
return false;
if ([EMAIL PROTECTED]("discoteca"))
return false;
}
function &getInstancia($count=false){
global $_miInstancia;
if (!isset($_miInstancia['db'])){
new db($count);
}
return $_miInstancia;
}
}
$conexiondb =& db::getInstancia(1);
print_r($conexiondb);
$conexiondb2 =& db::getInstancia();
print_r($conexiondb2);
?>
(The $count was just to prove we only have the one instance)
--
regards,
Tom
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php