嗨,请看一下下面的代码。
<?php
class A
{
public $name;
public function getName()
{
return $this->name;
}
}
class B extends A
{
public function setName()
{
$this->name = 'Prasad';
}
}
$obj = new B();
echo $obj->getName();
?>
在这里,当我回显名称时,它什么也不显示。与类A中的$name相关。这个问题是与getName还是setName有关?如何从扩展类B中设置类A中的$name变量。如何从类B对象中获取该变量。感谢对我遗漏的任何提示或解释。
您以前没有设置名称(使用$obj->setName()
)。
从技术上讲,它正在回显$name
变量(此时尚未定义)。不幸的是,它还没有设置好。请尝试使用$obj->setName()
设置名称。
您已经完成了代码的大部分工作,事实上,如果您添加一行告诉代码调用setName()
函数,您就会有一个工作示例:
$obj = new B();
$obj->setName();
echo $obj->getName();
通常情况下,您会使用带有参数的set
函数,然后传递要设置的值。您还可以将$name
属性设置为protected
,这意味着必须通过set&获取方法(手册中更多关于可见性的信息):
<?php
class A
{
protected $name;
public function getName()
{
return $this->name;
}
}
class B extends A
{
public function setName($name)
{
$this->name = $name;
}
}
$obj = new B();
$obj->setName('Prasad');
echo $obj->getName();
?>
是的,正如SomeKittens建议的那样,您需要首先调用setName()。
class A
{
public $name;
public function getName()
{
return $this->name;
}
}
class B extends A
{
public function setName()
{
$this->name = 'Prasad';
}
}
$obj = new B();
$obj->setName();
echo $obj->getName();
但是,最好在B
的构造函数中执行名称设置,如:
class A
{
public $name;
public function getName()
{
return $this->name;
}
}
class B extends A
{
public function B()
{
$this->name = 'Prasad';
}
}
$obj = new B();
echo $obj->getName();
这为我打印了Prasad
http://writecodeonline.com/php/以测试代码。
更好的是,在创建新的B
对象时传递名称"Prasad",如下所示:
class A
{
public $name;
public function getName()
{
return $this->name;
}
}
class B extends A
{
public function B( $value = 'Prasad' )
{
$this->name = $value;
}
}
$obj = new B();
echo $obj->getName(), "<br>";
$obj = new B( 'John' );
echo $obj->getName();
这是因为您没有首先设置name属性。调用B->setName()
,然后您可以通过调用B->getName()
来获取名称。