使用命名空间来分区项目的不良做法?

时间:2009-03-04 01:28:09

标签: php

我最近在PHP中学习了名称空间,并且想知道,这样做是不是很糟糕?

<?php

namespace String; // string helper functions

    function match($string1, $string2)
    {

        $string1 = trim($string1);
        $string2 = trim($string2);

        if (strcasecmp($string1, $string2) == 0) // are equal 
        {
            return true;
        } else {
            return false;
        }
    }


?>

在我将它作为String类的静态方法之前,但这对我来说似乎总是错误 ...哪个是更好的选择?我希望对我的辅助函数进行分类,并希望知道哪种方法更好。

修改 那么如果我在命名空间中声明匹配函数,那么如何访问匹配函数呢?我如何停止命名空间声明,比如如果我在其下面包含一个声明了新命名空间的文件,它是否会自动停止对第一个命名空间的引用?我该如何返回全局命名空间?

5 个答案:

答案 0 :(得分:2)

我把它放在命名空间中。一个类是描述php中的一个类型,虽然你可能在类似名称的类型上操作,严格来说它不是同一类型。命名空间只是一种逻辑分组的方式,这就是你正在使用类来做的事情。你唯一丢失的是可扩展性,但正如你所说,它只是一组静态方法。

答案 1 :(得分:2)

如果它们都是与字符串相关的函数,那么使它们成为静态方法并没有错。

如果你有一堆全局函数和/或变量你不想让全局范围变得混乱,那么命名空间将是更好的选择,但这在类中是没有意义的。 (我在自己的代码中有一个类,它更适合命名空间)。

如果您的代码有可能在其他地方重复使用,那么将所有内容都放在某种容器中是一种很好的做法,这样您就不会在其他人的全局变量上涂鸦......

至于你的编辑:

  • 命名空间与他们在IIRC中定义的文件绑定。不知道这会如何影响那里的包含文件,但我猜它们不会被继承。
  • 您可以通过::trim()
  • 来调用全局范围

答案 2 :(得分:1)

因为名称空间对于php来说是如此新鲜,所以人们已经做了很长时间你所做的事情 - 创建一个类,添加静态方法,并使用该类,就像它是一个名称空间一样。它看起来好像你正在考虑它。

答案 3 :(得分:0)

您可以使用类对某个数据上的某种函数进行分类。就像假设您有一个学生班级,该班级将保存学生信息和学生年龄和学生ID号码;并且还有一些返回和设置这些数据的方法。

此外,您将使用命名空间对类进行分类;现在假设您有另一个类来处理这些学生的大学注册,并使用其他类来管理课程。 Personaly,我会将所有这些类放在一个名为University的类别(即命名空间)中。

因此,它甚至不是一种不好的做法,它也为您提供了更多的代码可读性。如果你在一个小组工作,对于其他程序员来说,这将是更不可取的。

所以我个人强烈建议您在项目中使用那些在您认为合适的地方使用它们。

答案 4 :(得分:0)

理想情况下,最好将函数放在命名空间中。如果你依赖于自动加载,只适用于类,你需要将它们放在一个或多个类中。