2017-08-24 12 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') 
} 

をあなたがドキュメントどのような一般のコメントから伝えることができますこの「特徴」のコンセンサスがある。

関連する問題