2012-01-28 4 views
1

У меня есть два класса, класс абстракции и фактический функциональный класс. Мне нужно как-то хранить функциональный класс в классе абстракции и сделать его доступным для класса абстракции, но у меня возникли трудности ..Сохранение объекта класса в переменной класса

Heres некоторый код похож на то, что я пытаюсь достичь

Класс абстракции тот, который сопряжен с кодом, однако он может загружать несколько «пробок», которые фактически обрабатывают контакты с серверами полномочий и управление логикой полномочий, однако у меня возникают проблемы с загрузкой и хранением «подключаемых» объектов (как видно из строк 11 и 25 от класса абстракции.

Класс абстракции (auth.class.php):

<?php 
    class AuthManager { 
     private $userDatabase; 

     public function __construct() { 
      /** 
      * AuthManager(0):  Constructor for the class. Will initiate an 
      *      auth session. Also autoconnects to the user 
      *      service. Defaulting to LDAP 
      */ 
      $this ->userDatabase = new LDAPConnector(); 
     } 
     public function login($user, $pass) { 
      /** 
      * login(2):   Abstraction function for the user database. 
      *      will check user and password against the 
      *      user database and return the status 
      * 
      * @param string $user:  Username for the user 
      * @param string $pass:  Password for the user 
      * @return bool $status: 1 on sucess, 0 on failure 
      */ 
      if($user && $pass) { 
       if($this->userDatabase->login($user, $pass)) { 
        return 1; 
       } 
      } else 
       return 0; 
      } 
     } 
    } 
?> 

функционального класса (ldap.plug.php):

<?php 
class LDAPConnector extends AuthManager { 
    private $server = "192.168.0.3"; 
    private $connected = 0; 
    private $connection = 0; 
    private $domain = "morris"; 
    public function __construct($host = "192.168.0.3") { 
     /** 
     * LDAPConnector(1): Constructor for the class. Will connect to the server 
     * automatically unless told not to 
     * @param string $host:  IPAddr/Hostname of AD server 
     *       Defaults to private var $server 
     */ 
     if($host) { 
      // Safety net to check we actually have a server to 
      // connect to 
      if(function_exists("ldap_connect")) { 
       if($this->connection = ldap_connect($host)) { 
        $this->connected = 1; 
        return 1; 
       } 
      } 
     } else { 
      return 0; 
     } 
    } 

    public function login($user,$pass, $domain = "") { 
     /** 
     * login(2):   Attempts to verify user/pass combo with 
     *      the LDAP server 
     * 
     * @param string $user: Username to verify 
     * @param string $pass: Password to verirf 
     * @return bool  : 1 on sucess, 0 on failure 
     */ 
     if($user && $pass) { 

      // Verify we are actually connected to an LDAP server.. 
      if(!$this->connected) { 
       // We cant possibly run queries on a server that doesnt 
       // exist.. Exit with a failure. 
       return 0; 
      } 

      if(!$domain) { 
       // A domain needs to be specified for LDAP users.. 
       // If they havent given us append the default 
       $user = $this->domain."\\".$user; 
      } else { 
       // Prepend the supplied domain.. 
       $user = $domain."\\".$user; 
      } 

      // Attempt to bind to the LDAP server. If returns true, the 
      // uname/pwd combination was a good one. 
      if(ldap_bind($this->connection, $user, $pass)) 
       return 1; 
      else 
       return 0; 

     } else 
      return 0; 
    } 
} 
?> 

Это тогда будет называться так:

<?php 
$Auth = new AuthManager(); 

if($Auth->login("test", "123")) { 
    echo 'Logged in'; 
} 
?> 

Однако, когда я пытаюсь это PHP выплевывает

Catchable fatal error: Object of class LDAPConnector could not be converted to string in /var/www/LDAP Experiment/libs/auth.class.php on line 26 

Есть ли способ сделать то, что я пытаюсь, или мне нужно вернуться к чертежной доске?

Приветствия

+2

Что такое линия 25? В вашем коде нет доступа к переменной '$ connect'. –

+0

Это то, что меня пугает .. Ошибка прерывается линией $ this-> connection-> connect(), которая, насколько мне известно, является вызовом функции, а не переменной –

ответ

1

В auth.class.php:

public function login($user, $pass) { 
      /** 
      * login(2):   Abstraction function for the user database. 
      *      will check user and password against the 
      *      user database and return the status 
      * 
      * @param string $user:  Username for the user 
      * @param string $pass:  Password for the user 
      * @return bool $status: 1 on sucess, 0 on failure 
      */ 
      if($user && $login) { 
       echo $this->userDatabase; 
       if($this->userDatabase->login($user, $pass)) { 
        return 1; 
       } 
      } else 
       return 0; 
      } 
     } 

у вас есть неопределенная переменная: вход в если заявление. Каково намерение?

+0

Вы звезда , это была ошибка. Я должен начать более внимательно смотреть на номера строк 8 :). Благодаря! –