gpt4 book ai didi

PHP 命名空间,使用命令

转载 作者:行者123 更新时间:2023-12-04 16:53:18 24 4
gpt4 key购买 nike

我只是在学习 PHP 命名空间,我有一个非常简单的代码,但它不起作用,我想知道为什么:

我们有 n1.php包含一个命名空间和一个函数:

<?php
namespace app\cat1;
function echoo(){
echo "from cat 1";
}
?>
n2.php :
<?php
namespace app\cat2;
function echoo(){
echo "from cat 2";
}
?>

现在在 index.php我已经包含 n1.php 和 n2.php 来使用 echoo功能:
<?php

require_once('n1.php');
require_once('n2.php');

use app\cat1;
echoo();

?>

就我对命名空间的理解而言,上面的代码应该可以工作,但事实并非如此,我不知道为什么!?我告诉 PHP 使用 app\cat1;和被称为 echoo()功能,但我得到:
Fatal error: Call to undefined function echoo() in E:\xampp\htdocs\test\index.php on line 7

当然我可以做到这一点,它会起作用:
<?php

require_once('n1.php');
require_once('n2.php');

//use app\cat1; <-- this is commented
app\cat1\echoo(); // <-- and now I'm using full path to run the echoo()
?>

以上是有效的,但现在我们有 use 的原因是什么?在命名空间中?

另一件事:我们如何像上面那样将命名空间放在多个文件中,而不使用 include方法?我在 Laravel 框架文件中看到这种情况正在发生。文件只有 use etc\blah并且没有包含,它工作得很好。那是怎么发生的呢?

最佳答案

默认 use关键字将导入命名空间下的对象,您需要定义您正在使用 function
您需要将函数名称传递给 use 的另一件事所以要解决你的问题:

use function app\cat1\echoo;

docs :
// importing a function (PHP 5.6+)
use function My\Full\functionName;

因此,在您的示例中 - 在这里,只要大多数在线 IDE 不支持包含-,我就使用分组 namespace 而不是包含文件:
namespace app\cat1 {
function echoo(){
echo "from cat 1";
}
}

namespace app\cat2 {
function echoo(){
echo "from cat 2";
}
}

namespace {
use function app\cat2\echoo;
// ^^^^^^^^ see this
echoo();
// Output : from cat 2
}

现场示例: https://3v4l.org/TATgp

关于PHP 命名空间,使用命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43167059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com