为什么我能在构造函数中使用属性而不在类中定义,请阅读下面的代码。
<?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 :(得分:1)
PHP并不要求您声明属性。只需分配给一个属性就可以将其创建为公共属性。所以当第一个构造函数执行时:
$this->model = $m;
在对象中创建model
属性。
在PlasmaTv
课程中,model
和volume
属性与父类TV
中的属性不同,因为父级中的属性是私有的并且无法在孩子中访问。如果你这样做:
$plasma->volumeUp();
echo $plasma->volume;
它将打印6
,而不是7
,因为volumeUp()
增加了与PlasmaTv
中的公共属性不同的属性。
如果要共享子项和父项之间的属性,请声明它们protected
。但是,您无法在课程外使用$plasma->volume
。