0

これは、「助けて」の質問というよりも、ディスカッションのトピックです。

奇妙な問題に遭遇したばかりです。変数(オブジェクト)は、どこにも渡されない場合にオーバーライドされます。

例;

var_dump($node->title);
$entity = $server->pull($item);
var_dump($node->title);

2つのvar_dumpsは、2つの異なる値を表示します。

$itemは無関係の文字列です。

この時点では、「pull()」メソッドの内容が適切であるとは思いません。これがどこでオーバーライドされているかについては興味がありません。どのようにオーバーライドされているかについては興味があります。

メソッドに渡されていない限り、PHPはどのように変数を変更できますか?

私の関数には参照がありません。ノードは直接渡されます。

function my_function($node) {

オブジェクトのクローンを作成して も、変数の名前を変更しても

$my_node = $node;

複製されたオブジェクトは引き続きオーバーライドされます。 名前が変更されたオブジェクトは引き続きオーバーライドされます(つまり、名前とは関係ありません)。

これがどのように可能か知りたいです。pull()(または関連するメソッド)が、与えられていない変数をどのように乗り越えることができますか?

繰り返す必要があります。値がどこで変更されているかは関係ありません。メソッドに渡されていないときに値がどのように変更されているかは関係ありません。

4

2 に答える 2

1

これを行う:

$my_node = $node;

実際にはオブジェクトのクローンを作成しません。$ my_nodeを変更しても、どちらもオブジェクトへの単なるポインターであるため、$nodeに反映されます。http://www.php.net/manual/en/language.oop5.references.phpを参照してください。

したがって、$nodeまたは$nodeのコピーに何かが作用していて、オブジェクトが変更されている可能性があります。

上記のリンクからこの例を参照してください。

class A {
    public $foo = 1;
}  

$a = new A;
$b = $a;     // $a and $b are copies of the same identifier
             // ($a) = ($b) = <id>
$b->foo = 2;
echo $a->foo."\n";

$ b = $ aを実行したとしても、$ bのプロパティを変更すると、$aのプロパティが変更されます。

于 2012-11-29T02:19:32.413 に答える
0

したがって、PHP5のOOの重要な部分は、オブジェクトが常に参照によって渡されることです。これは私が完全に忘れていました。

これにより、呼び出されているメソッドが参照を介して私のオブジェクトにアクセスできる可能性が高くなり、この質問はばかげているように見えます。:)

http://php.net/manual/en/language.oop5.references.php

于 2012-11-29T03:48:04.333 に答える