【问题标题】:PHP "Object" classPHP“对象”类
【发布时间】:2011-04-18 00:15:23
【问题描述】:

我想创建一个名为“Object”的类,以便能够实现“toString()”、“equal()”...问题是“object”关键字已经被占用了,我想知道什么将是最好的实现。

我想到的第一个选项是使用命名空间,因此我在 php 的“对象”类和我的类之间没有任何并发​​性。问题是如果我想使用这两个“对象”类,我需要稍后在我的代码中重命名其中一个。

namespace System
{
    class Object
    {

    }
}

...

use System\Object as Object1;
use object as Object2;

另一种选择是用不同的方式称呼它。如果你认为它是最好的选择,你会怎么称呼它?

class ObjectD
{

}

你有更好的选择吗?

【问题讨论】:

    标签: php oop namespaces


    【解决方案1】:

    您可以使用synonym,例如EntityItem

    哦,顺便说一句,main/base/root 对象类称为stdClass

    编辑:我认为绝对不可能在任何地方单独使用“对象”。

    考虑以下几点:

    $test = new object();
    $test = (object) array();
    

    运行上面的代码,PHP怎么知道哪个是哪个?

    编辑 2:另外,如果我理解正确,您想创建自己的对象层次结构。在这种情况下,您应该根据您正在做的事情来命名对象。 例如,在 Joomla 中,就有 JObject。

    如果我必须分享我的经验,您应该始终为您的全局命名内容添加一个有效的前缀。我最近才通过我的一个小宠物项目意识到这一点。

    编辑 3:刚刚试了一下:

    use System\Object as Object1;
    use object as Object2;
    
    class object {
        public $test='aaa';
    }
    
    $a=new object();
    
    $b=(object)array('aaa'=>'test');
    
    echo '<pre>';
    print_r($a);
    print_r($b);
    

    印刷:

    object Object
    (
        [test] => aaa
    )
    stdClass Object
    (
        [aaa] => test
    )
    

    编辑 4: 有趣的是,这甚至可以在没有命名空间的情况下工作。

    【讨论】:

    • 我很确定 PHP 有一个已定义的行为,它会被遮蔽,但我确信它无论如何都会导致意外行为。
    • @Rafe Kettler;我完全同意。这可能行得通,但特别大的项目会产生问题。
    • @Christian PHP 总是让我感到惊讶(以糟糕的方式)。
    • @Christian,没有尝试过,但我的经验告诉我远离保留字。无论如何,知道这很有用,但我仍然会远离。
    【解决方案2】:

    使用保留字总是可能会产生问题。特别是如果以后有其他程序员为您的项目工作,您可能会让程序员彻夜难眠。

    我会去的;

    class ObjectD
    {
    
    }
    

    这可能不是您想要的,因为您想使用名称 object,但至少,您将编写更少的代码,这是一件好事。

    我还想补充一点,如果您将在大型项目中使用它,请确保您将花费大量时间进行调试,最终您会想要更改代码。

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 2010-11-25
      • 1970-01-01
      • 2011-04-14
      • 2016-08-26
      • 2020-03-25
      • 2011-06-20
      • 2020-06-22
      • 1970-01-01
      相关资源
      最近更新 更多