php - 用数组创建一个对象

时间:2016-03-10 00:39:07

标签: php arrays

我正在尝试解析XML文件。我想创建一个项目对象,其中包含标题,日期,版本和包含项目中所有文件的文件数组。一切似乎都有用,例如标题,日期和版本。

我打印出来看看结果。但是,当我尝试打印出数组以查看内容是否正确时,没有任何反应。我不知道我哪里出错了。

<?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 />\r\n";
    }

}

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打印出&#34;数组&#34; 7次。但是echo $endProject->fileListArray[$x]->name不打印任何内容。

我不确定数组是否刚刚被初始化,或者我是否错误地解析了XML文件。

<?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 个答案:

答案 0 :(得分:0)

默认情况下,函数参数按值传递,这意味着参数的值不会在函数外部更改,除非您通过引用传递。 PHP docs有更多详细信息,但我想如果您只是更改:

function initFiles($project){...function initFiles(&$project){...(请注意&amp; ),它会按预期工作。

答案 1 :(得分:0)

您的功能定义:

function initFiles( $project )

您的函数调用:

initFiles( $node, $project );

因此,该函数使用$node作为$project,但$node没有->fileListArray属性数组,因此array_push()失败。

并且,将来,不要忘记在我们的php代码中激活错误检查

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

通过错误检查,您的原始代码输出此错误:

  

PHP警告:array_push()要求参数1为数组,对象在...

中给出