douchang6770 2016-03-10 00:39
浏览 44
已采纳

php - 用数组创建一个对象

I am trying to parse an XML file. I want to create a project object that has instances such as title,date,version and an array of files that hold all the files within the project. Everything seems to work such as the title,date,and version.

I checked by printing them out to see the results. However, when I try printing out the array to see if the contents are correct, nothing happens. I'm not sure where I'm going wrong.

<?php

require_once('project.php');
require_once('files.php');


function parse()
{
    $svn_list = simplexml_load_file("svn_list.xml");
    $dir = $svn_list->xpath("//entry[@kind = 'dir']");


    foreach ($dir as $node) {
        if (strpos($node->name, '/') == false) {

            $endProject = initProject($node);

        }
    }

    for ($x = 0; $x <= 7; $x++) {
        echo $endProject->fileListArray[$x]->name . "<br />
";
    }

}

function initProject($node){

    $project = new project();
    $project->title = $node->name;
    $project->date = $node->commit->date;
    $project->version = $node->commit['revision'];

    initFiles($node,$project);

    return $project;

}

function initFiles($project){

    $svn_list = simplexml_load_file("svn_list.xml");
    $file = $svn_list->xpath("//entry[@kind ='file']/name[contains(., '$project->title')]/ancestor::node()[1]");
    //$file = $svn_list->xpath("//entry[@kind='file']/name[starts-with(., '$project->title')]/..");

    foreach($file as $fileObject){
        $files = new files();
        $files->size = $fileObject->size;
        $files->name = $fileObject->name;
        array_push($project->fileListArray, $files);
    }

}

echo $endProject->fileListArray prints out "Array" 7 times. However echo $endProject->fileListArray[$x]->name does not print anything out.

I'm not sure if the array is just not being initialized or if I'm parsing the XML file incorrectly.

<?xml version="1.0" encoding="UTF-8"?>
<lists>
<list
        path="https://subversion....">
    <entry
            kind="file">
        <name>.project</name>
        <size>373</size>
        <commit
                revision="7052">
            <author></author>
            <date>2016-02-25T20:56:16.138801Z</date>
        </commit>
    </entry>
    <entry
            kind="file">
        <name>.pydevproject</name>
        <size>302</size>
        <commit
                revision="7052">
            <author></author>
            <date>2016-02-25T20:56:16.138801Z</date>
        </commit>
    </entry>
    <entry
            kind="dir">
        <name>Assignment2.0</name>
        <commit
                revision="7054">
            <author></author>
            <date>2016-02-25T20:59:11.144094Z</date>
        </commit>
    </entry>
  • 写回答

2条回答 默认 最新

  • doushouj966020 2016-03-11 00:54
    关注

    Your function definition:

    function initFiles( $project )
    

    Your function call:

    initFiles( $node, $project );
    

    So, the function use $node as $project, but $node doesn't have ->fileListArray property array, so your array_push() fails.

    And, in the future, don't forget to activate error checking in our php code:

    error_reporting( E_ALL );
    ini_set( 'display_errors', 1 );
    

    With error checking, your original code output this error:

    PHP Warning: array_push() expects parameter 1 to be array, object given in ...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘