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') 
} 

您可以從文檔上的評論說一下一般這個「特徵」的共識是。

相關問題