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

我的代码中的PHP面向对象问题,php,oop,class,inheritance,extend,Php,Oop,Class,Inheritance,Extend,嗨,请看一下下面的代码 <?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 $o

嗨,请看一下下面的代码

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

您以前没有设置名称(使用
$obj->setName()
)。

这是因为您没有先设置name属性。调用
B->setName()
,然后您可以通过调用
B->getName()

来获取名称,这是因为您没有首先设置name属性。调用
B->setName()
,然后您可以通过调用
B->getName()

来获取名称。您的代码已经完成了大部分工作,事实上,如果您添加了一行命令代码调用
setName()
函数,您将有一个工作示例:

$obj = new B();
$obj->setName();
echo $obj->getName();
更典型的情况是,您可以使用带有参数的
set
函数,然后传递要设置的值。您还可以将
$name
属性设置为
protected
,这意味着必须通过set&get方法访问该值(手册中有更多介绍):


您的代码大部分都是这样,事实上,如果您添加一行命令代码调用
setName()
函数,您将有一个工作示例:

$obj = new B();
$obj->setName();
echo $obj->getName();
更典型的情况是,您可以使用带有参数的
set
函数,然后传递要设置的值。您还可以将
$name
属性设置为
protected
,这意味着必须通过set&get方法访问该值(手册中有更多介绍):



从技术上讲,它是在回显
$name
变量(此时未定义)。不幸的是,它还没有被设定。尝试使用
$obj->setName()
设置名称。

从技术上讲,它是在回显
$name
变量(此时未定义)。不幸的是,它还没有被设定。尝试使用
$obj->setName()
设置名称。

是的,正如一些小猫建议的那样,您需要先调用setName()

但是,最好在
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

更好的是,在创建新的
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();
A类
{
公共名称;
公共函数getName()
{
返回$this->name;
}
}
B类扩展了A类
{
公共函数B($value='Prasad')
{ 
$this->name=$value;
}
}
$obj=新的B();
echo$obj->getName(),“
”; $obj=新的B(‘约翰’); echo$obj->getName();
是的,正如一些小猫建议的那样,您需要先调用setName()

但是,最好在
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

更好的是,在创建新的
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();
A类
{
公共名称;
公共函数getName()
{
返回$this->name;
}
}
B类扩展了A类
{
公共函数B($value='Prasad')
{ 
$this->name=$value;
}
}
$obj=新的B();
echo$obj->getName(),“
”; $obj=新的B(‘约翰’); echo$obj->getName();
您是否尝试过先调用
setName()
呢?您是否尝试过先调用
setName()
而不使用参数,因为在本例中,名称是静态的。
setName()
而不使用参数,因为名称是静态的。很好。。。谢谢你把它说出来。太好了。。。谢谢你把这一点说出来。