2013-08-20 21 views
7

Ho una libreria https://github.com/tedivm/Fetch e utilizza lo spazio dei nomi Fetch e vorrei verificarne l'esistenza nel mio script.Come verificare l'esistenza di uno spazio dei nomi in php

Il mio codice script:

// Load Fetch 
spl_autoload_register(function ($class) { 
    $file = __DIR__ . '/vendor/' . strtr($class, '\\', '/') . '.php'; 
    if (file_exists($file)) { 
     require $file; 

     return true; 
    } 
}); 

if (!class_exists('\\Fetch')) { 
    exit('Failed to load the library: Fetch'); 
} 
$mail = new \Fetch\Server($server, $port); 

ma questo messaggio viene sempre visualizzato. Ma la biblioteca è completamente funzionante.

Grazie in anticipo per qualsiasi aiuto!

risposta

18

È necessario utilizzare l'intero spazio dei nomi in class_exists credo. Quindi, qualcosa di simile a:

class_exists('Fetch\\Server') 
+0

Fatal error: non definito costante 'Fetch \ Server' –

+0

dispiace, nessun precedente backslash, aggiornando la risposta – ars265

+0

Grazie! È un lavoro! –

2

Non è possibile controllare direttamente l'esistenza di un particolare spazio dei nomi, vale a dire che avrebbe dovuto class_exists('Fetch\\SomeClass'). Vedi anche questa domanda: is it possible to get list of defined namespaces

+0

È una buona capacità di farlo, ma può essere molto (processore) dispendioso in termini di tempo se si dispone di molte classi, che è dove si sarebbe più probabile utilizzare spazi dei nomi. – ars265

1

come George Steel ha scritto, è impossibile controllare per uno spazio dei nomi. Questo perché un namespace non è qualcosa che esiste; esistono solo strutture all'interno dei namespace. Vedi sotto Esempio:

namespace Foo; 

class Bar { 
} 

var_dump(class_exists('Foo')); // bool(false) 
var_dump(class_exists('Foo\Bar')); // bool(true)