2011-12-28 3 views
14

MySQLi works fine inside a class with no namespace and outside a class.Как использовать MySQLi внутри пространства имен

Я недавно начал использовать пространство имен, и теперь я наткнулся на код так же, как в следующем:

namespace Project; 

class ProjectClass{ 

     public static function ProjectClassFunction{ 
      $db = new mysql(data, data, data, data); 
     } 

} 

Однако, оно возвращает назад ко мне с сообщением

"Fatal error: Class 'Project\mysqli' not found"

Мой вопрос: Как использовать mysqli внутри класса, который использует пространство имен?

ответ

30

По умолчанию PHP попытается загрузить классы из вашего текущего пространства имен. Обратитесь к классу в глобальном пространстве имен:

$db = new \mysqli(/* ... */); 

Это то же самое, что вы могли бы сделать при обращении к классу в другом пространстве имен:

$foo = new \Some\Namespace\Foo(); 

Обратите внимание, что если вы остановились в начале обратная косая черта, PHP попытается загрузить класс относительно вашего текущего пространства имен. Следующий код будет выглядеть в пространстве имен Project\Some\Namespace для класса с именем Foo:

namespace Project; 
$foo = new Some\Namespace\Foo(); 

В качестве альтернативы, вы можете явно импортировать пространство имен и сохранить себя неоднозначность:

namespace Project; 

use Mysqli; 

class ProjectClass 
{ 
    public static function ProjectClassFunction() 
    { 
     $db = new Mysqli(/* ... */); 
    } 
} 
+2

Дополнительная информация: HTTP: //www.php .net/manual/en/language.namespaces.fallback.php – cmbuckley

+0

Спасибо за просветление. –