Как открыть файл .json в определенном пространстве имен - PullRequest
0 голосов
/ 16 мая 2019

Должно быть легко загрузить файл с использованием пространства имен, но я не могу сгенерировать URL для него. Файл находится в том же каталоге, что и MyClass, откуда он вызывается.

<?php namespace Mynamespace\Subnamespace;

class MyClass {
  public function getFile() {
    $fileLocation = 'myfile.json'; // file is located next to this class in Mynamespace\Subnamespace\file.json
    return file_get_contents( $fileLocation );
  }
}

Наиболее близким решением, которое я нашел, является использование метода getFileName() в ReflectionClass из MyClass. Но это возвращает полный URL, включая файл класса MyClass.php. И использование regExp для этого кажется излишним, поскольку, вероятно, существует более простое решение.

Если пространство имен можно каким-то образом преобразовать в действительный URL-адрес, это должно сработать.

Как получить файл file.json?

Ответы [ 3 ]

2 голосов
/ 16 мая 2019

Вы не можете использовать пространства имен для файлов JSON. Но поскольку он находится в том же каталоге, что и класс, вы можете использовать __DIR__

<?php namespace Mynamespace\Subnamespace;

class MyClass {
  public function getFile() {
    $fileLocation = 'myfile.json';
    return file_get_contents( __DIR__ . PATH_SEPARATOR . $fileLocation );
  }
}
0 голосов
/ 16 мая 2019

Если я правильно понимаю, просто это:

$fileLocation = __NAMESPACE__ . '\myfile.json';

См. PHP: ключевое слово пространства имен и __NAMESPACE__ константа .

Но так как вы утверждаете " файлнаходится рядом с этим классом в Mynamespace \ Subnamespace \ file.json", тогда вы можете просто использовать полный путь к текущему файлу:

$fileLocation = __DIR__ . '\myfile.json';  // or  dirname(__FILE__)

См. PHP: Магические константы .

0 голосов
/ 16 мая 2019

Самый простой способ сделать это с помощью get_class

<?php namespace Mynamespace\Subnamespace;

class MyClass {
  public function getFile() {
    // Will have backslashes so str_replace if this is a Unix environment
    $path = str_replace('\\', '/', get_class($this));
    $fileLocation = $path . '/myfile.json'; // Mynamespace/Subnamespace/myfile.json
    return file_get_contents( $fileLocation );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...