Re: green bean question on singleton php5

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



julian schreef:

you are forcing the no instantiation via abstract, instead of hiding via private method constructor.

you want to garantee a single instance of the mysqli object - who cares
exactly how this is done. besides which the whole exercise is bogus. you
want a DB connection abstraction that allows to create connections to
multiple DBs and given a given set of connection parameters to always
return the same connection object ... which is not exactly the same as
a singleton (at all)

given that dbaccess doesn't extend mysqli instantiation of dbaccess is completely
pointless no?


You change the constructor for an init function.

still the $dummy = new dbaccess ()..... looks like a simpler solution....

no idea what you mean, personally I can't see anything complicated in any of these
examples - I couldn't find a post showing something with $dummy.


Thanks for your comments



Jochem Maas wrote:
julian schreef:


Hi,

I am implementing this

try comparing this rewrite with your version:


abstract class dbaccess {
  static $db = null;

  private static function init() {
    if (dbaccess::$db))
    return;

    dbaccess::$db = new mysqli("localhost",USER,PASSWD,DB);
if(mysqli_connect_errno()) throw new Exception('cannot connect to DB');
  }

  public static function getDB() {
    self::init();
    return dbaccess::$db;
  }
}

try {
    $db = dbaccess::getDB();
    $db->query("SELECT `foo` FROM `bar` WHERE `qux`=1");
} catch (Exception) {
    die($e->getMessage());
}

class dbaccess{
  static $db=null;
  static $othervar=33;
      private  function dbaccess(){
    dbaccess::$db= new mysqli("localhost",USER,PASSWD,DB);
    if(mysqli_connect_errno()){
      echo "no way";
    }
  }
    public static function GetDb(){
  if(dbaccess::$db==null){

dbaccess is a static class, you should not be constructing it here it!

  dbaccess::$db= new dbaccess();
  }
  return  dbaccess::$db;
      }
}


$db=dbaccess::GetDE();

$db->query(..................);

will fail...with Call to undefined method dbaccess::query()

apparently $db is of type dbaccess... and thus has not does not have query implemented....


any hhelp appreciated.....

JCG



--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux