2016-11-15 4 views
0

Так что я config.php файл со следующим:Использование «использование» в включаемых файлах PHP

use PHPOnCouch\Couch; 
use PHPOnCouch\CouchAdmin; 
use PHPOnCouch\CouchClient; 

Тогда я еще один файл с именем, скажем, index.php, который включает в config.php

require_once("config.php"); 
include("page.php"); 

И у меня есть page.php, который использует CouchClient примерно так:

$client = new couchClient ($URL, $DB); 

Но page.php, я получаю следующее сообщение об ошибке:

Fatal error: Class 'couchClient' not found in page.php

не должна эта страницы быть подключена к моему config.php так, что я не должен ставить этот в моем page.php?

+2

Вам нужно добавить 'use' в файл, который будет использовать эти классы. Операции 'use' не наследуются. –

+0

Хорошо спасибо @MagnusEriksson - надеялся, что есть способ сделать их унаследованными. – bryan

+0

см. Этот вопрос http://stackoverflow.com/questions/10965454/how-does-the-keyword-use-work-in-php-and-can-i-import-classes-with-it –

ответ

3

Do в page.php:

$client = new \PHPOnCouch\CouchClient ($URL, $DB);

или

use PHPOnCouch\CouchClient; 
$client = new CouchClient ($URL, $DB); 

это также работает

use PHPOnCouch\CouchClient as SomeOtherFunnyName; 
$client = new SomeOtherFunnyName ($URL, $DB); 

и читать больше о namespaces в PHP.

Небольшое обновление для:

Shouldn't this page be connected to my config.php so that I don't have to put this in my page.php?

  • Каждый включают имеет свое собственное локальное пространство имен namesless или один/несколько именованных пространств имен!
  • Если пространство имен не задано, у вас есть пространство имен без имени. Иными словами, вы всегда можете использовать namespace { /*code*/ } в php-скрипте
  • Если вы находитесь в пространстве имен, вы должны включить через use все необходимые классы. И поскольку все файлы имеют собственное пространство имен, вы должны включить его через use
  • Обозначение пространств имен таким образом: namespace xyz; без привязок, предназначено для файлов, содержащих только одно пространство имен!

Простой exmaple (только один файл):

namespace a { 
     class a {} 
    } 
    namespace b { 
     use a\a; 
     class b extends a{} 
    } 
    namespace { 
     use a\a; 
     use b\b; 
     new a; 
     new b; 
    } 

позволяет сказать, что последнее пространство имен разве дано, и мы включаем это в новый файл, мы можем сделать

namespace mynamespace; 
    use a\a; 
    use b\b as x; 
    new a; 
    new x; 
+0

@ Magnus Eriksson yep, видел это тоже, обновил ;-) – JustOnUnderMillions