0

色を記述する次の PHP コードがあります。要するに、私は以前に PHP 4 を使用していて、現在は 5.5 に近づこうとしているので、PHP で実際にオブジェクトを使用するのはこれが初めてです。

とにかく、 Color クラスに設定されているデフォルト値に関係していると思われる論理エラーがあります。誰かが私のコンストラクターが機能しない理由、または何が起こっているのか説明してもらえますか?

class Color {
    private $red =      1;
    private $green =    1;
    private $blue =     1;
    private $alpha =    1;

    public function __toString() { return "rgb(" . $this->red . ", "
        . $this->green . ", " . $this->blue . ", " . $this->alpha . ")"; }
}

class RGBColor extends Color {
    public function __construct($red, $green, $blue) {
        $this->red = $red;      $this->green = $green;
        $this->blue = $blue;    $this->alpha = 1;
    }
}

class RGBAColor extends Color {
    public function __construct($red, $green, $blue, $alpha) {
        $this->red = $red;      $this->green = $green;
        $this->blue = $blue;    $this->alpha = $alpha;
    }

    public function __toString() { return "rgba(" . $this->red 
        . ", " . $this->green . ", " . $this->blue . ", " . $this->alpha . ")"; }
}

$c = new Color();
echo "Color: " . $c . "<br>";

$c1 = new RGBColor(0.6, 0.4, 1.0);
echo "RGB Color: " . $c1 . "<br>";

$c2 = new RGBAColor(0.6, 0.4, 1.0, 0.5);
echo "RGBA Color: " . $c2 . "<br>";

次の出力が得られます...

Color: rgb(1, 1, 1, 1)
RGB Color: rgb(1, 1, 1, 1)
RGBA Color: rgba(0.6, 0.4, 1, 0.5)

私はいつ取得する必要があります...

Color: rgb(1, 1, 1, 1)
RGB Color: rgb(0.6, 0.4, 1.0)
RGBA Color: rgba(0.6, 0.4, 1, 0.5)

ありがとう!-コーディ

4

3 に答える 3

2

初期化の順序の問題ではなく、可視性の問題です。プライベート変数には、同じクラスで定義されたメソッドのみがアクセスできます。Color::__toString()で定義された変数にアクセスしますColorが、子クラスのコンストラクターは子クラスの異なる変数にアクセスします。簡単な例として:

<?php
class A {
    private $p = __CLASS__;
}

class B extends A {
    function __construct() {
        $this->p = __CLASS__;
    }
}

$b = new B;
var_dump($b);

出力:

クラス B#1 (2) {
  プライベート $p =>
  文字列(1) "A"
  公開 $p =>
  文字列(1) "B"
}

メンバー変数に子孫でアクセスできるようにする場合は、非公開ではなく保護してください。

于 2013-10-26T06:46:06.557 に答える
2

子クラスで使用する変数には、protected not private を使用します。もう 1 つの方法は、セッターとゲッターを作成することです。

于 2013-10-26T06:47:05.250 に答える
0

おそらくintとfloatの問題だと思いますが、PHPは整数に丸めているようです。

于 2013-10-26T06:53:23.733 に答える