PHP:我们可以访问该属性而无需声明吗?

时间:2013-07-22 03:54:20

标签: php

<?php
class A
    {
        public $attribute1;
        function operation1()
            {
                echo 'operation1';
            }
}
$a = new A();
$a->attribute3 = 10;
echo $a->attribute3;

当我在脚本上方运行时,显示:10

问题:

attribute3中没有声明class A?为什么我仍然可以使用它$a->attribute3 = 10;

2 个答案:

答案 0 :(得分:3)

正如@Hamish所说......因为这就是PHP的工作原理。

就像你可以说:

$a = "hello";

并在函数范围内或在可以使用的全局范围内创建属性

$obj->a = "hello";

在$ obj实例的范围内创建属性。

如果这是不受欢迎的行为,您可以使用__get和__set魔术方法抛出异常。

class A{
   public $property1;

   public function __get($property){
          throw new Exception($property." does not exist in ".__CLASS__);
   }
   public function __set($property, $value){
          throw new Exception($property." does not exist in ".__CLASS__);

   }
}

答案 1 :(得分:1)

简而言之:因为你可以

PHP允许您定义对象属性,而无需在类中声明它们。

这不是一个不常见的功能,例如蟒:

class Foo(object):
    pass
foo = Foo()
foo.bar = "Hi"
print foo.bar  # "Hi"