令人困惑的PHP OO场景

Lan*_*don 5 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/>';
Run Code Online (Sandbox Code Playgroud)

输出:

sort property
sort function called
sort function return
Run Code Online (Sandbox Code Playgroud)

Jon*_*set 4

这是允许的,因为 PHP 区分属性和方法。当访问它们时,PHP 使用函数括号 () 的存在(或不存在)来确定是否正在引用属性或方法。因此,对于计算机来说没有任何歧义,尽管它可能会让人类感到困惑 =)