2013-08-20 20 views
7

Mam bibliotekę php https://github.com/tedivm/Fetch i używa ona przestrzeni nazw Fetch i chciałbym sprawdzić jej istnienie w moim skrypcie.Jak sprawdzić istnienie przestrzeni nazw w php

Mój kod skryptu:

// 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); 

ale ta wiadomość jest zawsze wyświetlany. Ale biblioteka w pełni działa.

Z góry dziękuję za pomoc!

Odpowiedz

18

Musisz używać całej przestrzeni nazw w class_exists. Więc coś takiego:

class_exists('Fetch\\Server') 
+0

błąd krytyczny: Undefined stałej 'Fetch \ server' –

+0

Niestety, nie poprzedni backslash, aktualizując odpowiedź – ars265

+0

dziękuję! To jest praca! –

2

nie można sprawdzić bezpośrednio na istnienie danej przestrzeni nazw, to trzeba by class_exists('Fetch\\SomeClass'). Zobacz też to pytanie: is it possible to get list of defined namespaces

+0

To miła możliwość zrobienia tego, ale może to być bardzo (procesor) czasochłonne, jeśli masz wiele klas, w których najprawdopodobniej będziesz używał przestrzeni nazw. – ars265

1

Jako George Steel napisał, że niemożliwe jest sprawdzenie przestrzeni nazw. Dzieje się tak dlatego, że przestrzeń nazw nie jest czymś, co istnieje; tylko struktury istnieją w przestrzeniach nazw. Zobacz poniżej przykład:

namespace Foo; 

class Bar { 
} 

var_dump(class_exists('Foo')); // bool(false) 
var_dump(class_exists('Foo\Bar')); // bool(true) 
Powiązane problemy