2012-05-29 1 views
1

Я не могу использовать библиотеку PEAR, когда я объявляю свое собственное пространство имен.Как использовать библиотеку PEAR внутри пользовательского пространства имен?

Пространство имен и функция автозагрузку:

<?php 
namespace ldapwrangler; 
function autoload($class_name) 
{ 
    $path = ROOT_DIR . "/inc/" . str_replace('\\', "/", $class_name) . ".class.php";  
    require_once($path); 
} 
spl_autoload_register('ldapwrangler\autoload'); 
?> 

Если я пытаюсь что-то вроде этого ROOT_DIR/вкл/ldapwrangler/LDAP.class.php:

<?php 
namespace ldapwrangler; 
require_once 'Net/LDAP2.php'; 

class LDAP{ 
    protected $connection; 
    protected $defaultSearchBase; 

    /** 
    * @param $conf conf array containing ldap direction login and server. 
    */ 
    function __construct($conf) 
    { 
     $this->connection = $this->set_connection($conf); 
     $this->defaultSearchBase = $conf['basedn']; 
    } 
    /** 
    * Bind to the directory configured in the $conf array 
    * 
    * @param $conf conf array containing ldap direction login and server. 
    */ 
    function set_connection($conf) 
    { 
     $ldap = Net_LDAP2::connect($conf); 

     // Testing for connection error 
     if (PEAR::isError($ldap)) { 
      $msg = 'Could not connect to LDAP server: '.$ldap->getMessage(); 
      Logging::log_message('error',$msg); 
      return false; 
     } 
     return $ldap; 
    } 

    //rest of the class... 
    } 
?> 

Я получаю сообщение об ошибке, как это:

May 29 10:03:32 reagand-desktop apache2: PHP Fatal error: require_once(): Failed opening required '/home/reagand/dev/ldap_wrangler/inc/ldapwrangler/Net_LDAP2.class.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/reagand/dev/ldap_wrangler/config.php on line 18

FYI, строка 18 является функцией require_once() функции автозагрузки.

Как я могу сказать php, чтобы не использовать пространство имен ldapwrangler для классов Net_LDAP2? Или любые другие классы, отличные от ldapwrangler, если на то пошло.

ответ

3

Объявить вы используете внешнее пространство имен:

<?php 

namespace ldapwrangler; 
use Net_LDAP2; 
require_once 'Net/LDAP2.php'; 

Каждый класс за пределами заявленных namespace потребностей быть объявлен use ключевое слово.

Также обратите внимание на PSR-0, стандарт для таких вещей, как использование пространства имен.

+0

Мне также пришлось добавить PEAR и Net ldap фильтр: ' namespace ldapwrangler; использование Net_LDAP2; использование Net_LDAP2_Filter; использование PEAR; require_once 'Net/LDAP2.php'; ' В качестве альтернативы, я выяснил, что я могу предисловие каждой функции PEAR или Net_LDAP2 с помощью« \ », и это сработало. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^