Php 如何在特定命名空间中打开.json文件
使用名称空间加载文件应该很容易,但我似乎无法生成指向它的url。该文件与MyClass位于同一目录中,从中调用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
<?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 );
}
}