PHP 5.xの中で参照渡し
-
22-09-2019 - |
質問
私はZendのPHP5の認定のために勉強しています、すべてが良いに見えるが、私は、変数私の参照を渡したり返すための現実の世界の例を見つけることができません。
これを使用するとき、誰かが例を持っている場合、それは、非常にいいだろう?
解決
レッツあなたは、配列から特定の値を削除する機能を書きたいと言っています。
function remove_elements($array, $item1, $item2, ...) {
...
}
あなたは、配列をコピーし、それを返すことができます。しかし、あなたは何が削除されたかどうかを知りたい場合は?代わりに、あなたはその場での配列を変更するの、削除要素の数を返します。だから、ます:
function remove_elements(&$array) {
// remove elements
return $number_removed;
}
あなたが関数内で複雑な構造を作成する場合は、あなたはそれを参照するのではなくそのコピーを返すようにしたいことがあります。 PHPが使用するコピー・オン・ライトので、しかし、これはかなり限界ケースである(つまり、その、それが修正されるまでコピーされません)が、いくつかの有効な使用事例があります。
あなたは、クラスのメンバ関数を書いているとき、参照による復帰は、より理にかなっています。あなたは、データメンバへの参照を返すことができますが、これはまた、カプセル化を破ることができます。
最後に、それはすべてのオブジェクトは、デフォルトで参照によって渡され、返されることは注目に値します。他のすべてが渡され、値によって返されます。
他のヒント
パス: ASORT()の
のような機能$array = array(3, 2, 1);
asort($array);
オブジェクトは、デフォルトでは、参照によって渡されます。 (正しい説明を参照 http://docs.php.net/language.oop5.references >)
参照で引数を渡すには、既に回答されています...
(実世界)として参照により戻り値は、任意の流れるようなインターフェイスを選択するための例示この方法は、独自のコールコンテキストと同じオブジェクトへの参照を返す場合(これを$)。戻り値はコピー/クローンした場合には(予想通り)これでしょうではない作品ます。
例えばます。
class MyClass {
protected $foo = 'n/a';
protected $bar = 'n/a';
function foo($val) {
$this->foo = (int)$val;
return $this;
}
function bar($val) {
$this->bar = (int)$val;
return $this;
}
function __toString() {
return 'foo='.$this->foo.' bar='.$this->bar;
}
}
$o = new MyClass;
$o->foo(1)
->bar(2);
echo $o;
このプリントはfoo=1 bar=2
と私はそれが1が期待する結果だと思う、何がここに驚きません。
メソッドが値で$これを返された場合、それはもう動作しません。あなたはコピーを返すためにPHPを強制することでこれをテストすることができます。代わりにreturn $this
ラインの使用の
return clone $this;
と出力されます。
foo=1 bar=n/a
(と私は直感的にそのインターフェイスを呼び出すことはありません; - ))
これは、役に立つかもしれません
public function addObject(array &$someData){
$newObj = Fabric::create($someData);
$this->listOfObj[] = $newObj;
return $newObj;
}
....
$this->addObj(array('idontknow' => 'anything'))->setName('mr.knowitall')->save();
... SRY。 Volkersと同じ:((私はそれを知っているように流暢インタフェースはチェーンである)。
画像は、あなたは、負荷の方法で流れるようなインターフェイスを持っています。負荷インターフェイスは、交換またはいくつかのデータを追加します。ここでは、負荷が成功したと判断する基準値$の成功によって、コールを持って行動することが有用である可能性があります。
リターン参照することにより: 行のリストを持つ一部のデータベース・オブジェクトを取ります。 Nrを。行ポイントのすべてのオブジェクト(parallesl)の右側のデータへ。あなたはNRを返す場合。あなたは一つのオブジェクト内の行をスキップして、あまりにも他の人にスキップすることができ、次のオブジェクトに渡します。常にオブジェクトのヴァリデの束を持っています。