2
<?php

// $searchResult is type of Outcome
// This is what we do:
dList::lessAnchor($searchResult)->showElement();
dList::moreAnchor($searchResult)->showElement();

/**
* @returns vAnchor (can get showed with showElement() - not part of the problem)
*/
public static function lessAnchor(Outcome $searchResult){
  $searchData = $searchResult->searchData;
  $searchData->Page = $searchData->Page - 1; // (!1)
  return self::basicAnchor($searchData, "Back");
}

/**
* @returns vAnchor (can get showed with showElement() - not part of the problem)
*/
public static function moreAnchor(Outcome $searchResult){
  $searchData=$searchResult->searchData;
  $searchData->Page = $searchData->Page + 1; // (!2)
  return self::basicAnchor($searchData, "More");
}

を呼び出すdList::lessAnchor()$searchResult、 の行に でマークされているように、 のプロパティを$searchData->Page1 減らして変更します(!1)。しばらくして (下の 1 行)、もう一度電話をかけdList::moreAnchor()ます$searchResult

マークPageでアトリビュートが 1 減っているのはなぜですか? (!2)参照渡しはしませんでし$searchResultた。

4

1 に答える 1

3

ドキュメントを見てください。これは意図された動作です。

PHP 5 以降、オブジェクト変数にはオブジェクト自体が値として含まれなくなりました。オブジェクトアクセサが実際のオブジェクトを見つけることを可能にするオブジェクト識別子のみが含まれています。オブジェクトが引数によって送信されたり、返されたり、別の変数に割り当てられたりする場合、さまざまな変数はエイリアスではありません。それらは、同じオブジェクトを指す識別子のコピーを保持します

これを避けたい場合は、必要に応じてオブジェクトを複製する必要があります。それはちょうどこのようなものです:

public static function lessAnchor(Outcome $searchResult){
  $searchData = clone $newResult->searchData; //$searchData now is a new object
  $searchData->Page=$searchData->Page-1; // (!1)
  return self::basicAnchor($searchData,"Back");
}
于 2012-04-19T19:37:32.100 に答える