2017-02-04 8 views
0

クラスで定義されていないコンストラクタ関数でプロパティを使用できる理由は、以下のコードをお読みください。PHPのコンストラクタ関数との混同

<?php 
class TV 
{ 
public function __construct($m, $v) 
{ 
    $this->model = $m; 
    $this->volume = $v; 
} 
} 

$tv_one = new TV("Samsung", 6); 
echo $tv_one->model."<br><br>"; 
echo $tv_one->volume; 
?> 

このコードもご覧ください。私はクラスの外で私有財産を共有することができます。ちょうどこのコードに行きます。

<?php 
class TV 
{ 
private $model = "Samsung"; 
private $volume = 2; 

public function volumeUp() 
{ 
    return $this->volume++; 
} 

public function volumeDown() 
{ 
    return $this->volume--; 
} 
public function __construct($m, $v) 
{ 
    $this->model = $m; 
    $this->volume = $v; 
} 
} 
class PlasmaTv extends TV 
{ 
public $plasma = true; 
public function hello() 
{ 
    return "I am new " . $this->model . " and my default volume is " . $this->volume . "."; 
} 
public function __construct($m, $v, $p) 
{ 
    $this->model = $m; 
    $this->volume = $v; 
    $this->plasma = $p; 
} 
} 
$plasma = new PlasmaTv("Soni", 6, true); 
echo $plasma->model."<br><br>"; 
echo $plasma->volume."<br><br>"; 
echo $plasma->plasma; 
echo $plasma->hello(); 
?> 
+0

最初の例はわかります。 PHPは動的言語ですので、選択した場合は動的にプロパティを定義できます。デフォルトでは公開されています。なぜあなたはクラスの外からアクセスできるのかを説明します。 – arkascha

+0

2番目の例では、これらの2つのプロパティは、 'TV'クラスでプライベートとして宣言されています。つまり、クラス「PlasmaTV」はそれらを見ることができません。したがって、 '$ this-> model'は動的に作成されたプロパティにアクセスすることができます。 – arkascha

答えて

1

PHPでは、プロパティを宣言する必要はありません。プロパティに代入するだけで、それをパブリックプロパティとして作成します。だから、最初のコンストラクタはない場合:オブジェクト内のmodelプロパティを作成し

$this->model = $m; 

を。親のプロパティがプライベートであり、子にアクセスすることはできませんのでごPlasmaTvクラスで

は、modelvolumeプロパティは、親クラスTVにおけるものと同じではありません。そうした場合:volumeUp()PlasmaTvの公共財産とは異なる性質をインクリメントするので

$plasma->volumeUp(); 
echo $plasma->volume; 

それは、ない76を、印刷します。

子と親の間でプロパティを共有する場合は、protectedと宣言します。しかし、あなたはクラスの外から$plasma->volumeを使用することはできません。

+0

それでは、このキーワードはどうですか、私は "this"キーワードでクラスのプロパティに興味を持っていますか? –

+0

アクセスできるクラスプロパティのみを参照できます。子クラスは親クラスのプライベートプロパティにアクセスできないので、 '$ this-> model'は子クラスに新しいプロパティを作成します。 – Barmar

関連する問題