我的代码中的PHP面向对象问题


PHP Object Oriented Issue On My Code

嗨,请看一下下面的代码。

<?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();

这为我打印了Prasadhttp://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()来获取名称。