为什么PHP允许从类外部创建类属性?

Sid*_*ril 3 php properties

来自Java背景,我发现这很奇怪.请看一下这段代码 -

<?php  
    class People {
        private $name;
        private $age;
        public function set_info($name, $age) {
            $this->name = $name;
            $this->age = $age;
        }

        public function get_info() {
            echo "Name : {$this->name}<br />";
            echo "Age : {$this->age}<br />";
        }
    }

    $p1 = new People();
    $p1->set_info("Sam",22);
    $p1->get_info();

    $p1->ID = 12057;

    echo "<pre>".print_r($p1,true)."</pre>";
?>
Run Code Online (Sandbox Code Playgroud)

输出:

People Object
(
    [name:People:private] => Sam
    [age:People:private] => 22
    [ID] => 12057
) 
Run Code Online (Sandbox Code Playgroud)

没有IDPeople类中创建任何属性,但我可以ID使用在类外部分配值p1.

在Java中,这会产生错误 -

找不到标志

这是PHP中的一个功能吗?如果它是什么叫它?它有什么好处?

Ham*_*eni 5

由于PHP是一种动态类型的脚本语言,因此它允许Dynamic Properties.我推荐你这篇文章.

JavaScript和Python等语言允许对象实例具有动态属性.事实证明,PHP也是如此.查看有关对象和类的官方PHP文档,您可能会认为动态实例属性需要自定义__get和__set魔术方法.他们没有.