gpt4 book ai didi

PHP 错误,同时 (1) 导入非复合命名空间或 (2) 导入任何命名空间以实例化类

转载 作者:行者123 更新时间:2023-12-04 17:00:55 26 4
gpt4 key购买 nike

非复合 PHP 命名空间的示例:

namespace Html;
复合 PHP 命名空间的示例:
namespace NS\Html;
如果我尝试导入非复合 PHP 命名空间,则会出现以下错误:

Warning: The use statement with non-compound name 'Html' has no effect in /home/public_html/Samples/PHP/Namespaces/ImportNamespace1.php on line 34


接下来,我尝试使用复合 PHP 命名空间。现在上述错误(在尝试使用命名空间时)消失了,但是当我尝试在导入的命名空间中实例化一个类时,出现错误:

Fatal error: Uncaught Error: Class 'Table' not found in /home/public_html/Samples/PHP/Namespaces/ImportNamespace1.php:38


我发现有效的是以下内容的组合:
  • 使用复合命名空间
  • 导入类而不是命名空间
    然后,我可以在此过程中没有任何错误地实例化该类。

  • 这与 manual说。
    请注意,我使用的是 Lightspeed PHP 7.3 版。
    这是有效的代码:
    命名空间定义:必须是复合的(在文件 Namespace1.php 中):
    <?php

    namespace NS\Html;

    class Table
    {
    }
    ?>
    导入并使用类(而不是命名空间)(文件 ImportNamespace1.php):
          use NS\Html\Table As Table;   # Import and alias the class.

    $table = new Table();

    ?>
    我想问:
    有没有人实际使用过非复合命名空间,然后导入命名空间(而不是类)来实例化类?请提供实际代码。

    最佳答案

    如果我理解正确,我认为这就是您要找的东西?

    namespace b {
    class my_class{
    function test() {
    echo 'here';
    }
    }
    }

    namespace a {
    use b as c;
    // FQN
    (new \b\my_class())->test();
    // Aliased
    (new c\my_class())->test();
    }
    我个人永远不会编写这样的代码,我也不知道您可以为命名空间设置别名,但它似乎有效。
    演示: https://3v4l.org/79Dmg
    编辑
    这是一个包含两个文件且没有括号命名空间的版本
    <?php

    // file b.php
    namespace b;

    class my_class
    {
    function test()
    {
    echo 'here';
    }
    }
    <?php

    // file a.php
    namespace a;

    use b as c;

    require_once 'b.php';

    // FQN
    (new \b\my_class())->test();
    // Aliased
    (new c\my_class())->test();

    关于PHP 错误,同时 (1) 导入非复合命名空间或 (2) 导入任何命名空间以实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69163769/

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