0

我有一个看起来像这样的代码片段:

var_dump($download2);
$this->download->filename = $download2->filename.'.'.$ext;
$this->download->filepath = $this->tmpDir.'/'.$this->download->filename;
var_dump($download2);

我的第一个var_dump回报是:

object(stdClass)#730 (2) {
  ["filename"]=>
  string(10) "ol8kw2q55b"
  ["filepath"]=>
  string(66) "a/path/storage/photos/tmp/ol8kw2q55b"
}

第二个var_dump返回这个:

object(stdClass)#730 (2) {
  ["filename"]=>
  string(15) "ol8kw2q55b.jpeg"
  ["filepath"]=>
  string(71) "a/path/storage/photos/tmp/ol8kw2q55b.jpeg"
}

为什么要$this->download->filename = $download2->filename.'.'.$ext;更新我的$download2变量(如果我删除该行两者都var_dump将返回相同的值)?


我的班级看起来像这样(剥离了一些代码):

<?php
class MyClass {
    protected $download;

    public function download($url) {
        $filename = $this->newHash();
        $this->download = (object)[
            'filename' => $filename,
            'filepath' => $this->tmpDir.'/'.$filename
        ];

        return $this->download;
    }

    public function addExtension($download2) {
        $ext = $this->allowedMimes[$mimeType];
        var_dump($download2);
        $this->download->filename = $download2->filename.'.'.$ext;
        $this->download->filepath = $this->tmpDir.'/'.$this->download->filename;
        var_dump($download2);

        return $this->download;
    }
}

我用这个运行它:

$class = new MyClass;
$var = $class->download("http://...");
$class->addExtension($var);
4

1 回答 1

1

诡异的,

你能把所有的类文件贴在这里吗?

我想知道 $download2 变量来自哪里。也许 $this->download 是通过引用从 $download2 或其他东西加载的。

尝试使用我拥有的代码片段单独测试代码会给出以下结果:

var_dump($download2);
$this->download->filename = $download2->filename.'.'.$ext;
$this->download->filepath = $this->tmpDir.'/'.$this->download->filename;
var_dump($download2);

输出:

object(stdClass)#2 (2) {
  ["filename"]=>
  string(4) "mama"
  ["filepath"]=>
  string(3) "dir"
}
object(stdClass)#2 (2) {
  ["filename"]=>
  string(4) "mama"
  ["filepath"]=>
  string(3) "dir"
}

添加 :

以下行: $var = $class->download("http://...");

实际上返回 $this->download 变量,然后

我看到您将其传递给第二种方法:

$class->addExtension($var);

所以,实际的 download2 和 $this->download 对象是一样的。

第一个 var_dump() 输出 $this->download 的第一个值

object(stdClass)#2 (2) { ["filename"]=> string(8) "XDEFEFEQ" ["filepath"]=> string(9) "/XDEFEFEQ" }

并且由于 $this->download 已自动更改,因此 $download2 变量会自动更改。

于 2013-10-23T12:02:14.013 回答