0

だから私はこれらの2つのクラスを持っています。

class Data {
protected $custnum, $custname, $inorout, $totalqty, $contractqty, $totalsales, $margin, $contract, $paper;

function __set($property, $value)
{
    $this->$property = $value;
}

function __get($property)
{
if (isset($this->$property))
    {
    return $this->$property;
    }
}

class Salesman {
protected $num, $name;
//  protected $repdata = (array) $Data;
protected $repdata = array();

function __construct() {
//      $this->repdata = new Data;
}

// set undeclared property
function __set($property, $value)
{
    $this->$property = $value;
}

function __get($property)
{
if (isset($this->$property))
    {
    return $this->$property;
    }
}
}

そして、Salesman クラスにある $repdata オブジェクトに値を設定するのに苦労しています....

そのようです

                $reptemp = new Salesman;
            $datatemp = new Data;
            $reptemp->num = $repnum2;
            $reptemp->name = $repname2;
            $datatemp->custnum = $custnum;
            $datatemp->custname = $custname;
            $datatemp->inorout = "out";
            $datatemp->totalqty = $totalqty;

//              $reptemp->repdata[$custnum.$datatemp->inorout] = $datatemp;
            $reptemp->repdata[] = $datatemp;

            $salesmen[$reptemp->num] = $reptemp;

$datatemp が正しく入力されていることはわかっていますが、セールスマン オブジェクト内の repdata オブジェクトを入力しようとすると、エラーは表示されませんが、何も入力されません。

私はこれを検索しようとしましたが、私が間違っていることを完全に突き止めることができませんでした. 私はJavaオブジェクトに精通していますが、phpと「魔法の」クラスは私の頭を回転させています。

どんな助けでも大歓迎です。

本当にありがとう。

4

2 に答える 2

0

これが、内部配列が参照されない理由です。コンテンツを含む配列のコピーを取得し、元のコピーではなくコピーを変更します。

PHP がその名前の既存のフィールドを見つけた場合、__get() メソッドは呼び出されないため、repdata を public にする必要があります。それ以外の場合は、参照として返す必要があります。

于 2010-12-29T16:08:34.007 に答える
0

PHP 配列では、オブジェクトとしてスレッド化されません。

__get および __set の実装により、すべての保護/非公開プロパティへのパブリック アクセスが許可されます。

これらのメソッドは、プロパティが存在しないアクセスできない場合に呼び出されますが、__get および __set は保護されたプロパティにアクセスできます!

あなたが公共の財産なら、公共の財産を宣言してください!

ちなみに、 --get と --set はエラー処理にのみ使用してください。num プロパティが必要であることがわかっている場合は、適切に宣言してください。

于 2010-12-29T16:33:09.120 に答える