如何在特定名称空间中打开.json文件

时间:2019-05-16 20:37:51

标签: php namespaces

使用命名空间加载文件应该很容易,但是我似乎无法生成该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()的{​​{1}}中使用方法ReflectionClass。但这会返回完整的URL,包括类MyClass.php文件。并且使用regExp似乎过于矫kill过正,因为可能有一个更简单的解决方案。

如果可以以某种方式将名称空间转换为有效的url,那应该可以解决问题。

应该如何获取file.json?

3 个答案:

答案 0 :(得分:2)

您不能将名称空间用于JSON文件。但是,由于它与该类位于同一目录中,因此您应该可以使用__DIR__

<?php namespace Mynamespace\Subnamespace;

class MyClass {
  public function getFile() {
    $fileLocation = 'myfile.json';
    return file_get_contents( __DIR__ . PATH_SEPARATOR . $fileLocation );
  }
}

答案 1 :(得分:0)

最简单的方法是使用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 );
  }
}

答案 2 :(得分:0)

如果我理解正确,就这样:

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

请参见PHP: namespace keyword and __NAMESPACE__ constant

但是由于您声明“ 文件位于Mynamespace \ Subnamespace \ file.json 中此类的旁边”,因此您可以使用当前文件的完整路径:

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

请参见PHP: Magic Constants