2011-12-03 41 views
3

我试图决定它是否适合使用类声明一组〜20个公共功能:应该使用PHP类吗?

if (!class_exists('example')) { 

    class example { 

     # Declare ~20 functions (methods), all of 
     # which are public. (There's nothing else 
     # in the class.) 

     public static function one() { /* ... */ } 
     public static function two() { /* ... */ } 
     # ... 

    } # class 

} 

使得可作为方法:

example::one(); 
example::two(); 

什么优点/缺点是出现以上方法vs。只是这样做:

if (!defined('EXAMPLE_LOADED')) { 

    define('EXAMPLE_LOADED', true); 

    function example_one() { /* ... */ } 
    function example_two() { /* ... */ } 
    # ... 

} 

使可用的功能为:

example_one(); 
example_two(); 

编辑 - 相关的性能测试:

+1

如果使用足够高的PHP版本,您还可以对它们进行命名空间。 –

+3

你应该很可能不会为此使用类。不应将类用作任意函数的“容器”。 –

+1

您可能会更好地使用[namespaces](http://us.php.net/namespaces) - 它取决于您使用的PHP版本。 –

回答

3

这里有一个关于这个主题的链接。

When to use static vs instantiated classes

我也会说,我以前分组的类似功能于纯静态类。我喜欢它给出的语法糖。

format::usaPhone($val); 
format::usaZip($val); 
date::convertTz($date, $tz1, $tz2); 

这样的东西。我建议你务实一点,确保你最终做的事情满足两件事。

  1. 您对结果感到满意。
  2. 生成的代码有意义。

这可能听起来像是一个明显的陈述,但它是一个很好的提醒,当一个简单的解决方案出现时,不要过度考虑事情。

+0

我主要关注的是让人们很容易地弄清楚如何使用,但同时要保持其性能优化和可维护性。我在这个问题中增加了一些性能测试的链接,尽管只有当你做了大量的操作时,这些差异才是重要的。将相关的funcs组织到静态工具类中是很有意义的。我认为,只要他们名字正确,人们很容易理解。命名空间反斜杠是一个旅程,如果你从来没有见过它,但我认为保持命名空间fu​​ncs会更容易b/c你不需要使用'self ::' – ryanve

+0

不要忽视低功能。 :)如果你愿意,你可以使用命名约定命名空间。 –

+0

我一直在问,为什么如果,为什么定义?你来自C背景吗? C++,C#,C。只需为你的库使用require_once,并忘记检查已定义的内核。 –

0

第一种情况会增加抽象级别并帮助您将(通常)辅助方法分组。

最好的做法是将您的示例类单独的文件中,然后让当你需要他们

require_once('./path/to/example.class.php'); 
1

好吧,oop和功能程序方法之间的区别是开销。

绝对的oop是好的,他们可以将您的代码分组,更容易管理,它的主要特点使其理想是您的代码将变得可重用,使其更加灵活,这就是为什么这种方法更适合大型项目或系统。 oop的缺点是它在开销方面比较昂贵,如果与功能方法相比会更慢,虽然功能方法在性能上要快得多,但它不会像oop所期望的那样可以重复使用,但它将全部取决于在你身上。

我对你的建议是,如果它真的是一个大项目你的处理然后oop是非常好的,但如果你认为它不是那么必要在oop做它,然后去功能或如果可能,你也可以做程序化的方式比2更快,但正如我所说的,这一切都取决于你的策略。