为什么为一个变量赋值更新另一个变量?

时间:2013-10-23 11:48:16

标签: php

我有一个代码片段,如下所示:

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);

1 个答案:

答案 0 :(得分:1)

奇怪,

你能在这里粘贴所有课程文件吗?

我想知道$ download2变量的来源。也许$ this-&gt;下载是通过$ 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-&gt; download(“http:// ...”);

实际上会返回$ this-&gt;下载变量,然后返回

我看到你将它传递给第二种方法:

$类 - &GT; addExtension($变种);

因此,实际下载2与$ this-&gt;下载对象相同。

第一个var_dump()输出$ this-&gt; download

的第一个值

object(stdClass)#2(2){   [ “文件名”] =&GT;   string(8)“XDEFEFEQ”   [ “文件路径”] =&GT;   string(9)“/ XDEFEFEQ” }

由于$ this-&gt;下载被自动更改,$ download2变量会自动更改。