令人困惑的PHP OO场景

时间:2011-07-24 19:12:54

标签: php oop

为什么允许这样做?当你继承使用这个范例的代码时,这是非常令人困惑的...特别是当所述代码甚至不打扰官方声明公共属性时,而是用一些随机方法设置它。有没有办法防止它(更改设置,使用某个关键字或使用界面)?

class Collision
{
    public $Sort = "sort property";

    public function Sort()
    {
        print 'sort function called<br/>';
        return 'sort function return';
    }
}

$a = new Collision();
print $a->Sort . '<br/>';
print $a->Sort() . '<br/>';

输出:

sort property
sort function called
sort function return

2 个答案:

答案 0 :(得分:4)

这是允许的,因为PHP可以区分属性和方法。访问它们时,PHP使用函数bracket()的存在(或不存在)来确定是否引用了属性或方法。因此,计算机没有歧义,即使它可能会让人感到困惑=)

答案 1 :(得分:2)

我想以一种可能不寻常的方式来说明这一点。

  

多年前,在苏联,有一双鞋   制造工厂。这种植物用皮革制成鞋子。植物   有一个配额,制造这么多的鞋子。过了一会儿,工人们发现了   没有任何规则说它们必须制造这么多尺寸   鞋子,所以他们开始搅拌相同尺寸的鞋子,所以他们可以去   早点回家。

     

过了一会儿,当局抓住并开始制作   规则。规则说他们必须创造如此多的特定尺寸;   然后工厂在同一尺寸的鞋子上放一个不同尺寸的邮票。然后一个   颁布的规则是,必须制​​造如此多的鞋子   皮革。因此,该工厂生产的鞋子有3“鞋底,同样   大小不管。最终,工厂关闭了。

故事的道德?如果您的开发人员不理解遵循您精心设计的规则符合他们的最佳利益,那么由于某种原因,您可能会遇到问题。如果您的规则不受谨慎和必要性的指导,那么您可能会遇到问题(在PHP中)。如果你讨厌PHP并且无法忍受它如何做某些事情,那么你可能会更好地使用其他语言。

正如我的评论所说,最谨慎和最便宜的(就花费的时间而言)将是建立谨慎的规则,但不是为了创造一些错误的结构(如魔术吸气剂/制定者和其他残余物),因为你的狡猾的程序员可以并且可能会(有时甚至没有意识到它,例如在函数中创建的公共属性)绕过它们。

建立有意义且每个人都理解并购买的规则。这是我的建议,这本质上比任何事情都更有意见。但我希望它有所帮助。 :)