【问题标题】:Property is null in method 2 after being set in method 1在方法1中设置后,方法2中的属性为null
【发布时间】:2011-12-06 17:22:55
【问题描述】:

希望你能帮我解答这个问题!

Index.php

include_once 'files.class.php';
$file_object = new FileObject('resources');
$file_object->ReturnCurrentDirectoryList();

files.class.php

class FileObject{
public $directory_list;

    function __construct($current_directory_in){
        $this->directory_list = $this->BuildCurrentDirectoryList($current_directory_in);
    }

    function BuildCurrentDirectoryList($current_directory_in){
        $i = 0;
        $iterator = new DirectoryIterator($current_directory_in);

        foreach ($iterator as $fileinfo){
            if ($fileinfo->isDir()){
                $this->directory_list[$i]['pathname'] = $fileinfo->getPathname();
            }elseif($fileinfo->isFile()){
                $this->directory_list[$i]['filename'] = $fileinfo->getFilename();
            }
            $i++;
        }
    }

    function ReturnCurrentDirectoryList(){
        var_dump($this->directory_list);
    }
}

这一切结束后,返回的是

null

但是应该返回的是

array  0 =>  array 'pathname' => string 'resources\.',  1 => array 'pathname' => string 'resources\..', 2 =>  array 'pathname' => string 'resources\Images'

我对类/方法有点陌生..

【问题讨论】:

  • 只需吐出一些调试打印/vardumps 即可找出问题所在
  • 我一直在使用 var_dump 来检查它,但是在 BuildCurrentDirectoryList() 的末尾一切看起来都很好,然后在 ReturnCurrentDirectoryList() 中吐出一个 null。不知道为什么或我能做些什么来删除它。
  • 你用函数BuildCurrentDirectoryList 的返回覆盖你的$this->directory_list 属性(在construct() 中),它不返回任何东西。

标签: php methods


【解决方案1】:

这是错误的:

$this->directory_list = $this->BuildCurrentDirectoryList($current_directory_in);

您分配给$this->directory_list,但BuildCurrentDirectoryList 不返回任何内容。该函数只有副作用,没有返回值。

删除分配,使构造函数看起来像这样,你应该很高兴:

$this->directory_list = array(); //I like to initialise arrays to the empty array
$this->BuildCurrentDirectoryList($current_directory_in);

【讨论】:

  • 完美!看了之后觉得好傻谢谢你:)
  • 如果您在每个函数的顶部编写函数规范,并带有返回值和副作用,也许这样的事情会更容易发现?
【解决方案2】:

在您的构造函数中,您将 directory_list 分配给 BuildCurrentDirectoryList 的返回值,但在 BuildCurrentDirectoryList 中没有返回任何内容,而是直接在该方法中分配 directory_list。最后,BuildCurrentDirectoryList 返回 NULL。所以,要么返回 directory_list,要么就不要像这样分配它:

function __construct($current_directory_in){
    $this->BuildCurrentDirectoryList($current_directory_in);
}

【讨论】:

  • 完美!看了之后觉得好傻谢谢你:)
猜你喜欢
  • 2011-07-02
  • 2021-10-28
  • 2013-10-30
  • 2017-12-14
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多