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"
}

2番目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 変数を返し、その後

2番目のメソッドに渡していることがわかります:

$class->addExtension($var);

したがって、実際の download2 は $this->download オブジェクトと同じです。

最初の var_dump() は $this->download の最初の値を出力します

object(stdClass)#2 (2) { ["ファイル名"]=> 文字列(8) "XDEFEFEQ" ["ファイルパス"]=> 文字列(9) "/XDEFEFEQ" }

そして、$this->download が自動的に変更されるため、$download2 変数が自動的に変更されます。

于 2013-10-23T12:02:14.013 に答える