PHP nesne Singleton çalışmıyor

2 Cevap php

I am programming a website backend in PHP and I need to encapsulate $_SESSION in a class. I've made my Session class a singleton but I am having trouble using it.

class Session
{

    private static $instance;

    public static $sessionID;

      private function __construct()
      {
          session_start();
          self::$sessionID = session_id();
      }

      public function Session() {
          return Session::singleton();
      }

      public static function singleton()
      {
          if (!isset(Session::$instance)) {
              Session::$instance = new Session();
          }

          return Session::$instance;
      }

      public function destroy()
      {
          foreach ($_SESSION as $var => $val) {
              $_SESSION[$var] = null;
          }

          session_destroy();
      }

      public function __clone()
      {
          trigger_error('Clone is not allowed for '.__CLASS__,E_USER_ERROR);
      }

      public function __get($var)
      {
          return $_SESSION[$var];
      }

      public function __set($var,$val)
      {
          return ($_SESSION[$var] = $val);
      }

      public function __destruct()
      {
          session_write_close();
      }

      public function exist( $var ) {
        return isset($_SESSION[ $var ]);
      }

 }

Zamanın% 95 ince çalışıyor. Ama occasionnaly ben çağırdığınızda var_dump(Session::singleton());

çıkışı: object(Session)#2 (0) { }

Bana benim Oturum sınıfın başka bir örneğini yapmak olduğunu açık görünüyor, ama bunun mümkün olduğunu tam olarak nasıl görmüyorum.

Thanks a lot!

2 Cevap

(Sadece özel biri bırakarak) public kurucu kaldırmayı deneyin

  public function Session() {
      return Session::singleton();
  }

Ben bunu% 100 emin değilim ama bir public kurucu olan Singleton desen uymaz

The '#2' (after 'object(Session)') is not number of instance of Session class but it's next number of object created by php. If You get #2 it seems that You've created something(object) before. I've tested Your class and when I run "var_dump(Session::singleton());" I get: "object(Session)#1 (0) { }" but when I run it at end of script I get (for example): "object(Session)#31 (0) { }"

Selamlar