<?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;
?
答案 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"