Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在特定命名空间中打开.json文件_Php_Namespaces - Fatal编程技术网

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

Php 如何在特定命名空间中打开.json文件,php,namespaces,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\f

使用名称空间加载文件应该很容易,但我似乎无法生成指向它的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 );
  }
}
我找到的最接近的解决方案是在MyClass的ReflectionClass中使用getFileName方法。但它返回完整的url,包括类MyClass.php文件。在上使用regExp似乎有些过分,因为可能有更简单的解决方案

如果名称空间可以以某种方式转换为有效的url,那么就应该做到这一点


如何检索file.json?

最简单的方法是使用


如果我理解正确的话,请注意:

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

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

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

请参阅。

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


出于好奇,为什么不找一个你写这些东西的中心位置呢?如果您这样做的话,维护这个会容易得多。@Abracadver是的,我尝试过使用名称空间。返回名称空间Mynamespace\Subnamespace的名称。但是如果我生成这样的名称空间,我的file\u get\u contents函数将返回一个错误警告:file\u get\u contentsMynamespace\Subnamespace\myfile.json:无法打开流:没有这样的文件或目录。。。显然,我需要的是实际的url,而不是名称空间。JSON文件的实际完整路径是什么?@Machavity JSON文件只存储一些与MyClass特别相关的值。所以把它们放在一起似乎是个好主意,效果很好。我错误地认为DIR将引用最初调用代码的路径,我错了!
$fileLocation = __DIR__ . '\myfile.json';  // or  dirname(__FILE__)
<?php namespace Mynamespace\Subnamespace;

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