0

こんにちは、以下のコードをご覧ください。

<?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 オブジェクトからそれを取得するにはどうすればよいですか。私が見逃したことについてのヒントや説明を感謝します。

4

5 に答える 5

1

$obj->setName()名前を ( を使用して) 前に設定していません。

于 2012-07-16T01:53:38.533 に答える
1

実際、コードに関数を呼び出すように指示する行を追加すると、実際にsetName()機能する例が得られます。

$obj = new B();
$obj->setName();
echo $obj->getName();

より一般的にはset、パラメーターを指定して関数を使用し、設定する値を渡します。$nameまた、プロパティをに設定しますprotected。これは、 set & get メソッドを介して値にアクセスする必要があることを意味します (詳細については、マニュアルを参照してください)。

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

?>
于 2012-07-16T01:55:54.693 に答える
1

技術的には、変数をエコーし​​てい$nameます(その時点では未定義です)。残念ながら、まだ設定されていません。を使っ$obj->setName()て名前を設定してみてください。

于 2012-07-16T01:57:28.750 に答える
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();
于 2012-07-16T01:58:21.577 に答える
0

最初に name 属性を設定していないためです。を呼び出すB->setName()と、 を呼び出すことで名前を取得できますB->getName()

于 2012-07-16T01:54:03.333 に答える