0

所以我有这两个课程。

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 已正确填充,但是当我尝试在 salesmen 对象中填充 repdata 对象时,没有显示错误,但没有填充任何内容。

我确实尝试过搜索这个,但无法完全确定我做错了什么。我熟悉 java 对象,但是 php 和“魔术”类让我头晕目眩。

任何帮助将不胜感激。

非常感谢。

4

2 回答 2

0

这就是为什么内部数组没有引用的原因。您将获得包含其内容的数组副本,然后更改副本,而不是原始副本。

您应该公开 repdata,因为如果 PHP 找到具有该名称的现有字段,则不会调用 __get() 方法。否则,您必须将其作为参考返回。

于 2010-12-29T16:08:34.007 回答
0

在 PHP 中,数组不是作为对象线程化的。

您对 __get 和 __set 的实现允许公开访问您的所有受保护/私有财产!

如果属性不存在或不可访问,则调用这些方法,但 __get 和 __set 可以访问受保护的属性!

如果您是公共财产,请声明公共财产!

顺便说一下 --get 和 --set 应该只用于错误处理。如果您知道您需要一个 num 属性,请正确声明它!

于 2010-12-29T16:33:09.120 回答