Импорт проблем пространства имен в PHP [dубликат]

Я новичок в этой вещи пространства имен.

У меня есть 2 класса (отдельные файлы) в моей базовой директории, скажем class1.php и class2.php внутри каталога src/.

class1.php

namespace \src\utility\Timer;

class Timer{
    public static function somefunction(){

    }
}

class1.php

namespace \src\utility\Verification;
use Timer;

class Verification{
     Timer::somefunction();
}

Когда я выполняю class2.php, я получаю фатальную ошибку, которая [ ! d6] PHP Неустранимая ошибка: Class 'Timer' не найден в path / to / class2.php в строке ***

Я где-то читал SO, что мне нужно создать Autoloaders для этого ,

UPDATE

Создал автозагрузчик, который будет require всеми необходимыми файлами. Если это так, то как я подхожу к созданию одного, а если нет, то что еще проблема? поверх моего php-скрипта. Итак, теперь класс2.php закончится следующим образом.

namespace \src\utility\Verification;
require '/path/to/class1.php'
use Timer;
//or use src\utility\Timer ... both doesn't work.

class Verification{
     Timer::somefunction();
}

Это также не работает, и это показывает, что класс не найден. Но если я удалю все namespaces и use. Все работает нормально.

2
задан 22 April 2016 в 13:01

2 ответа

Вам понадобится реализовать автозагрузчик, поскольку вы уже прочитали об этом в SO.

Вы можете проверить стандарт автозагрузки PSR-4 по адресу http: //www.php-fig. org / psr / psr-4 /, и вы можете увидеть пример реализации автозагрузки PSR-4 и реализацию примера класса для обработки нескольких пространств имен здесь https://github.com/php-fig/fig-standards/blob/master/ общепринятый / PSR-4-autoloader-examples.md.

1
ответ дан 15 August 2018 в 16:11
  • 1
    Понимаю. Я действительно читал их прямо сейчас. Это означает, что ключевые слова namespace и use бесполезны без автозагрузчика? – Parthapratim Neog 22 April 2016 в 10:29
  • 2
    Пространства имен - это всего лишь способ инкапсуляции элементов, как говорят документы – Andreas 22 April 2016 в 10:31

Мы можем решить проблему пространства имен двумя способами

1) Мы можем просто использовать пространство имен и потребовать

1) Мы можем просто использовать пространство имен и потребовать

Путь к первому пути (пространство имен и требуется)

Class1.php (Timer Class)
namespace Utility;

class Timer
   {
    public static function {}
   }

Class1.php (Timer Class )

namespace Utility;
require "Class1.php";

//Some interesting points to note down!
//We are not using the keyword "use" 
//We need to use the same namespace which is "Utility" 
//Therefore, both Class1.php and Class2.php has "namespace Utility"

//Require is usually the file path!
//We do not mention the class name in the require " ";
//What if the Class1.php file is in another folder?
//Ex:"src/utility/Stopwatch/Class1.php"  

//Then the require will be "Stopwatch/Class1.php"
//Your namespace would be still "namespace Utility;" for Class1.php

class Verification
   {
     Timer::somefunction();
   }

Class2.php (класс проверки)

Создайте файл composer.json. В соответствии с вашим примером «src / Utility» Нам нужно создать файл composer.json перед папкой src. Пример. В папке с именем myApp у вас будет файл composer.json и папка src.
   {
     "autoload": {
     "psr-4": {
        "Utility\\":"src/utility/"
        }
     }   
   }

Путь к первому пути (пространство имен и требуется)

   composer dump-autoload

Теперь перейдите в эту папку, откройте свой терминал в папке, где это файл composer.json. Теперь введите терминал!

Создайте файл composer.json. В соответствии с вашим примером «src / Utility» Нам нужно создать файл composer.json перед папкой src. Пример: в папке myApp у вас будет файл composer.json и папка src.

namespace Utility;

class Timer
     {
      public static function somefunction(){}
     }
Verification.php (класс проверки)
namespace Utility; 
require "../../vendor/autoload.php"; 
use Utility\Timer; 

class Verification
  {
     Timer::somefunction(); 
  }

Это создаст папку поставщика. Поэтому, если у вас есть папка с именем «MyApp», вы увидите папку поставщика, папку src и файл composer.json

6
ответ дан 15 August 2018 в 16:11

Другие вопросы по тегам:

Похожие вопросы: