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

当我运行上面的脚本时,它显示:10

问题:

没有attribute3in 的 声明class A?为什么我还能用$a->attribute3 = 10;

4

2 回答 2

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__);

   }
}
于 2013-07-22T04:09:00.467 回答
1

简而言之:因为你可以

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

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

class Foo(object):
    pass
foo = Foo()
foo.bar = "Hi"
print foo.bar  # "Hi"
于 2013-07-22T04:07:04.730 回答