1

私はそのようなクラス構造を持っています:

class general {

    private $var;

    function set_val( $val ) {
        $this->var = $val;
    }

    function get_val() {
        return $this->var;
    }

}


class A extends general {

    function __construct( $val ) {
        parent::set_val( $val );

    }

    ....

}


class B extends general {

    ....

}

対応するメイン スクリプトは次のようになります。

<?php
$a = new A( "Apple" );
$b = new B();

echo "A: " . $a->get_val();
echo "B: " . $b->get_val();

出力:

A: Apple
B:

ここでの問題は、A と B のすべてのインスタンスが親クラス general の独自の変数 $var にアクセスし、すべての $var が互いに独立していることです。

一般的な親クラスで変数 $var を一度設定する方法はあります? (つまり $b->get_val() は "Apple" も出力する?!)

背景: 一般クラスに言語依存の値を持つ変数をロードしたいと考えています。これらの変数は、すべての子クラスで使用できるようにする必要があります。

4

3 に答える 3

1

データは、異なるオブジェクト間で自動的に共有されるわけではありません。static基本的にグローバル変数である、静的にアクセスするクラス プロパティを使用できます。ただし、オブジェクトによって提供されるカプセル化は通常、良いことだと考えられているため、これは通常は悪い考えです。

于 2012-08-26T11:59:40.173 に答える
0

理想的には、コード内でオブジェクトに共通のデータを共有させたい場合は、それらを別のオブジェクトに分離し、そのオブジェクトをコード内で使用することをお勧めします。

例: 言語に依存しないデータは、言語に依存しない機能に対応する別のクラスに入ることができます。ただし、いくつかの制約のために 1 つのクラスのみを使用する必要がある場合、唯一のオプションは、それらをクラスの静的メンバーとして持つことです。

于 2012-08-26T12:22:43.383 に答える
0

$var を private ではなく protected として宣言します。プライベート変数は、それらを宣言するクラスでのみ使用でき、子クラスでは使用できません。保護された変数は、定義クラスと、親クラスを拡張するすべてのクラスの両方で使用できます。

于 2012-08-26T12:24:36.003 に答える