嗨,请看下面的代码。
<?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类对象中获取该变量。欣赏我错过的任何暗示或解释。
答案 0 :(得分:1)
您之前没有设置名称(使用$obj->setName()
)。
答案 1 :(得分:1)
你的代码大部分都在那里,事实上,如果你添加了一行代码来告诉代码调用setName()
函数,你会有一个有用的例子:
$obj = new B();
$obj->setName();
echo $obj->getName();
更典型的是,您将使用带有参数的set
函数,然后传递您要设置的值。您还可以将$name
属性设置为protected
,这意味着必须通过set&amp; amp;获取方法(手册中更多关于visibility):
<?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();
?>
答案 2 :(得分:1)
从技术上讲,它回显了$name
变量(此时未定义)。不幸的是,它还没有确定。尝试使用$obj->setName()
设置名称。
答案 3 :(得分:1)
是的,因为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();
我使用http://writecodeonline.com/php/来测试代码,打印Prasad
。
更好的是,在创建新的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();
答案 4 :(得分:0)
这是因为您没有先设置name属性。拨打B->setName()
,然后拨打B->getName()
即可获取姓名。