【问题标题】:why does PHP allow creating class properties from outside the class?为什么 PHP 允许从类外部创建类属性?
【发布时间】:2015-07-19 07:28:55
【问题描述】:

来自 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>";
?>

输出:

People Object
(
    [name:People:private] => Sam
    [age:People:private] => 22
    [ID] => 12057
) 

尚未在 People 类中创建任何属性为 ID,但我可以使用 p1 在类外为 ID 赋值。

在 Java 中,这会报错 -

找不到符号

这是 PHP 的一个特性吗?如果是那它叫什么?它有什么好处?

【问题讨论】:

标签: php properties


【解决方案1】:

由于 PHP 是一种动态类型的脚本语言,它允许 Dynamic Properties。我把你推荐给这个this article

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 2014-01-02
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多