-1

私は本当にphpの参照で立ち往生しています。私のプログラムでは、これに似たものがあります。

  1. プログラム

    class Test
    {
        private $_property;
    
        function __construct($property)
        {
            $this->_property = $property;
        }
    
        public function setProperty($property)
        {
            $this->_property = $property;
        }
    
        public function getProperty()
        {
            return $this->_property;
        }
    }
    
    function doSmth(Test $var)
    {
        $newVar = new Test('test');
    
        //I need to do something here...
    }
    
    $var = new Test('original');
    
    doSmth($var);
    
    var_dump($var);
    
  2. 質問

関数の外部にある関数を使用した後にそれを見ることができるように$newVar、変数のすべての内容を変数にコピーするにはどうすればよいですか。また、プログラムでゲッターとセッターを使用することはできません。ゲッターとセッターがたくさんあり、コードがたくさんあるからです。私の制限でこの問題を解決することは可能ですか?$varvar_dump()doSmth()

更新:関数で値を返すことができず、doSmth()試し__cloneましたが何も機能しません。誰かが私にそれをどのように行うことができるかを教えてもらえますか__clone()

4

3 に答える 3

4

cloneキーワードを使用して、オブジェクトのコピーを作成することができます。ソースオブジェクトの完全なレプリカを作成するのに役立ちます。または、私があなたにも役立つと思うことは、参照によってテストオブジェクトに合格することを試みることができます:

function doSmth(Test &$var)
{
    // Here you can do something with your var
}
于 2012-09-18T15:08:23.417 に答える
2

$newVar関数のコンテキストにのみ存在します。

あなたがしたいのは、次のような戻り値を作成することです。

function doSmth(Test $var)
{
    $newVar = new Test('test');

    //I need to do something here...

    return $newVar;
}

代わりに次のような関数を呼び出します。

$myNewShinyVar=doSmth($var);

このようにして、関数はクラスのオブジェクトをTest戻り値として返します。

var_dump($myNewShinyVar);

編集:値を返すことができない場合は、代わりに参照で渡すことができます:

function doSmth(&$var)
{
    $var = new Test('test');
}

これにより、(コピーを渡すのではなく)パラメーターとして渡される変数自体が変更されます。

doSmth($var);
var_dump($var);
于 2012-09-18T15:07:16.807 に答える
0

私があなたの質問を何度も読んだら、これがあなたが求めているものだと思います:

function doSmth(Test $var)
{
  $newvar = clone $var;
  // do some stuff on a copy of $var, leaving $var intact
}

$var = new Test('original');

doSmth($var);

var_dump($var);
于 2012-09-18T15:13:01.070 に答える