1

オブジェクトの配列 (オブジェクトの配列を保持する) からメソッドを呼び出すにはどうすればよいですか。私は読んだ:PHPのオブジェクトの配列内の各項目のオブジェクトメソッドの結果で配列を取得しますが、取得できませんでした。

これが私のテストコードです。最初のオブジェクトは属性を保持し、次にオブジェクトは複数の属性のレコードを保持します。

/*--------------------------------- */
class SqliteAttribute {

    private $_fieldname = '';
    private $_fieldvalue = '';
    private $_type = 'TEXT';
    private $_key = true;

    function __construct($fieldname, $fieldvalue, $text, $key) {
        $this->_fieldname  = $fieldname;
        $this->_fieldvalue = $fieldvalue;
        $this->_text       = $text;
        $this->_key        = $key;
    }

    function AsArray() {
        $tempArray = array('fieldname'     => $this->_fieldname,
                           'fieldvalue'    => $this->_fieldvalue,
                           'type'          => $this->_type,
                           'key'           => $this->_key
        );
        return $tempArray;
    }
}

/*--------------------------------- */
class SqliteRecord {

    private $_attributes = array();

    function __construct() {
    }

    function AddAttribute($fieldname, $fieldvalue, $text, $key) {
        $attribute          = new SqliteAttribute($fieldname, $fieldvalue, $text, $key);
        $this->attributes[] = $attribute;
        var_dump($this->_attributes); // shows it!
    }

    function AsArray() {
        $temp_array = array();
        var_dump($this->_attributes); // shows nothing
        foreach ($this->_attributes as $key => $value) {
            $temp_array[] = $value->AsArray();
        }
        return $temp_array;
    }

}

そして、私はそれをこのように呼びます

function updateFiles($files, $rootpath) {
    $recordset = new SqliteRecordSet;
    foreach ($files as $file) {
        $record = new SqliteRecord;
        $record->AddAttribute('Path', $file[0], 'TEXT', true);

        print_r($record->AsArray()); // shows nothing       
    }

    $recordset->insertIfNotExist_index();
}
4

1 に答える 1

1

$this->attributes vs $this->_attributes

エラー報告を E_ALL に設定し、display_errors をオンにしてコードを開発する必要があります。php はここであなたの間違いを通知します。

于 2012-05-12T19:57:23.480 に答える