Как да използвам библиотека 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/inc/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...
    }
?>

Получавам грешка като тази:

29 май 10:03:32 reagand-desktop apache2: PHP Фатална грешка: require_once(): Изисква се неуспешно отваряне '/home/reagand/dev/ldap_wrangler/inc/ldapwrangler/Net_LDAP2.class.php' (include_path='.:/ usr/share/php:/usr/share/pear') в /home/reagand/dev/ldap_wrangler/config.php на ред 18

За информация, ред 18 е частта require_once() от функцията за автоматично зареждане.

Как да кажа на php да не използва пространството от имена на ldapwrangler за класовете Net_LDAP2? Или всякакви други класове, които не са ldapwrangler, по този въпрос.


person David R.    schedule 29.05.2012    source източник


Отговори (1)


Декларирайте, че използвате външно пространство от имена:

<?php

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

Всеки клас извън декларирания namespace трябва да бъде деклариран чрез ключовата дума use.

Моля, разгледайте и PSR-0, стандарт за такива неща като използване на пространство от имена.

person alganet    schedule 29.05.2012
comment
Също така трябваше да добавя PEAR и Net ldap филтър: ` namespace ldapwrangler; използвайте Net_LDAP2; използвайте Net_LDAP2_Filter; използвайте PEAR; require_once 'Net/LDAP2.php';` Като алтернатива разбрах, че мога да предваря всяка PEAR или Net_LDAP2 функция с \ и това също работи. Благодаря! - person David R.; 29.05.2012