Why is this allowed? It's very confusing when you inherit code that uses this paradigm... especially when said code doesn't even bother officially declaring the public property, but instead sets it in some random method. Is there a way to prevent it (changing a setting, using some keyword, or using an interface)?

```
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/>';

```

Output:

```
sort property
sort function called
sort function return

```