【问题标题】:Is it possible to import an entire namespace in PHP?是否可以在 PHP 中导入整个命名空间?
【发布时间】:2018-08-17 18:57:56
【问题描述】:

如果我有一个项目,其中包含一组位于命名空间 CORE 中的核心函数和一组位于命名空间 PROJECT 中的项目文件,那么我是否可以授予 PROJECT 中的文件访问权限到CORE 中的所有函数,而不必在CORE\ 前加前缀?

我知道我可以为每个功能use function CORE\func1,但我想知道是否有任何方法可以覆盖use CORE

编辑:

这是我的测试文件:

index.php

<?php
namespace PROJECT;
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

include_once 'core.php';
include_once 'project.php';

// both work
print \CORE\corefunc();
print projfunc();

// Works
// use function CORE\corefunc;
// print corefunc();

// Does not work
use CORE;
print corefunc();

core.php

<?php
namespace CORE;
function corefunc()
{
    return "I'm CORE<br>";
};

project.php

<?php
namespace PROJECT;
function projfunc()
{
    return "I'm PROJECT<br>";
}

在浏览器中输出

I'm CORE
I'm PROJECT

Fatal error: Uncaught Error: Call to undefined function corefunc() in /development/FWTest/index.php:18 Stack trace: #0 {main} thrown in /development/FWTest/index.php on line 18

【问题讨论】:

  • 并不是说听起来粗鲁之类的,但是您不能在您的代码上尝试一下吗?
  • 我做了,但它不起作用,因此我的问题
  • 我不明白我错过了什么。反对票和您的评论表明我很愚蠢,这应该可行。我错过了什么?
  • use not include()require() 任何文件,它“只是告诉 PHP 在哪里查找”。反对票可能是因为你一开始就没有代码
  • 当然,我手动包含实际文件(在此示例中,为了理解 PHP 命名空间的这一部分)

标签: php namespaces


【解决方案1】:

假设你有functions-core.php:

<?php
namespace Core;
function test() {
    return "Core-Test";
}

functions-project.php:

<?php
namespace Project;
function test() {
    return "Project-Test";
}

在您的main.php 中您可以这样做:

<?php

include ('functions-core.php');
include ('functions-project.php');

如果你要从文件中删除命名空间,你会得到一个错误:

PHP 致命错误:无法重新声明 test()(之前在...中声明过)

使用命名空间 PHP 知道这些是“不同的”函数,并且可以毫无错误地加载它们。然后,您可以像使用

一样访问
echo Core\test();
echo Project\test();

在您的main.php 中。小时

【讨论】:

  • 我明白这一点。我想知道我是否可以对 PHP 命名空间做任何事情,允许我在另一个没有函数冲突的已知命名空间中使用类和函数,就好像它是我的本机命名空间一样。想象一下核心命名空间有 50 个类/函数,我可以放入 50 个 use CORE\class1;use function CORE\func1 条目以获得该效果,但我想知道是否有一种方法可以一次性获取所有类/函数。我会猜到use CORE 可能有用,但它没有。
猜你喜欢
  • 1970-01-01
  • 2019-03-11
  • 2020-01-14
  • 2011-11-15
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多