【问题标题】:Is it possible to have two classes with the same name if they're in different folders?如果它们位于不同的文件夹中,是否可以有两个具有相同名称的类?
【发布时间】:2011-08-04 16:50:39
【问题描述】:

我想知道如果 PHP 中有两个具有相同名称的类位于不同的子文件夹中是否有什么问题,除了错误编辑错误文件的明显“人为因素”?

我已经在网络上的此处和其他地方寻找与此相关的其他帖子,但我没有找到任何可以回答这个特定问题的帖子。不过,我确实发现这个Autoload classes from different folders 非常有帮助,事实上它解决了我的其他问题之一。

【问题讨论】:

    标签: php class-names


    【解决方案1】:

    即使在同一个文件夹中,也可能有同名的类。这是代码示例。

    文件名:namespace.php

    <?php
    namespace MyProject {
    
    class Connection {
    public function __construct(){
        echo 'My Project class call';
        }
    }
    
    function connect() {
    echo 'My Project connect function.';
    }
    
    }
    
    namespace AnotherProject {
    
    class Connection {
    public function __construct(){
        echo 'Another Project class call';
        }
    }
    
    function connect() {
    echo 'Another Project connect function.';
    }
    
    }
    ?>
    

    另一个文件,我们使用这个命名空间。 文件名:myapp.php

    <?php 
    
    require 'namespace.php';
    
    //create a class object
    $obj = new MyProject\Connection;
    
    //calling a function 
    MyProject\connect();
    
    //calling a another function
    AnotherProject\connect();
    ?>
    

    【讨论】:

      【解决方案2】:

      即使在同一个文件夹中也可能有同名的类。

      但请确保您一次只在 PHP 脚本中加载了一个类。

      它们不能同时加载到同一个脚本中。

      PHP 不知道您是否创建了两个同名的类,但事实是 PHP 不会在同一个脚本中加载它们。您一次可以使用一门课程。

      你也可以在php中查看namespaces

      【讨论】:

      • 谢谢,我会调查命名空间的事情。并感谢其他所有回答的人!就我而言,我认为我不太可能需要两个具有相同名称的类,但我认为如果可能存在问题,现在找出而不是下线是明智的!
      【解决方案3】:

      当然你可以在同一个文件夹或不同文件夹中创建具有相同类名的文件,但是你只能在一个文件中使用一种实现。

      如果您确实需要为这两个类赋予相同的名称并且必须在一个文件中使用它们,那么一个解决方案可能是命名空间...http://www.php.net/manual/en/language.namespaces.rationale.php

      【讨论】:

        【解决方案4】:

        这就是命名空间的用武之地。 http://www.php.net/manual/en/language.namespaces.rationale.php http://www.php.net/manual/en/language.namespaces.basics.php

        这使您可以区分两个同名的类。

        【讨论】:

          【解决方案5】:

          事实上你可以,但也要考虑重载和接口......

          【讨论】:

            【解决方案6】:

            我相信当你实例化这些类时你会遇到冲突。其实我没测试过,但是 PHP 不像 Java,你可以把同名的类放在不同的包里,并指定包在实例化时区分它们...

            【讨论】:

              猜你喜欢
              • 2018-12-26
              • 1970-01-01
              • 2011-06-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多