2017-08-24 32 views
1
<?php 

class ser { 

    public $a; 

} 

$x = new ser; 
$x->b = 10; 

var_dump($x); 

就是这样。PHP设置属性不存在于课堂作品中,为什么?怎么样?

ser只有$a属性,但是我们可以设置$b这一类的新的对象和它的作品,尽管这个类没有任何$b财产

输出

E:\XAMPP\htdocs\fun\test2.php:12: 
object(kurde)[1] 
    public 'a' => null 
    public 'b' => int 10 

为什么这个作品?

为什么我们可以添加属性并将其设置为这个类,而它不完全属于这个类?

这怎么可能?为什么可能?

任何目的?感觉这是可能的吗?

+2

因为你可以... Aint PHP精彩 – RiggsFolly

+0

为什么这是允许的?为什么我们能做到这一点?这个和意义的目的是什么? @RiggsFolly –

+0

你也可以在javascript中使用它:)和Python:0 :) – RiggsFolly

回答

3

这就是PHP所说的“overloading”。这与几乎任何其他面向对象语言中的重载都不同。

如果你不喜欢它,你可以使用__set魔术方法抛出一个异常,如果不存在的属性设置:

public function __set($name, $value) { 
    throw new \Exception('Property "'.$name.'" does not exist') 
} 

您可以从文档上的评论说一下一般这个“特征”的共识是。

相关问题