これを回避するにはどうすればよいですか?私はforeachを使用することを考えていましたが、目的に合ったPHPの機能をもっと学びたいと思っていました。
私はそれが何をするかは明らかだからforeach
は非常に良い解決策である、あなたのケースのために言うでしょう。あなたはあなたの例でエイリアシングにarray_walk
申し出を模倣することがあります:これはarray_walk
に、より密接に来るべき
foreach($pins as &$pin) {
$pin->timestamp = $this->convertTime(strtotime($pin->timestamp));
}
unset($pin);
。おそらくあなたは(おそらく)だけでなく、配列自体を参照するようにしたい:
$pinsRef = &$pins;
foreach($pinsRef as &$pin) {
$pin->timestamp = $this->convertTime(strtotime($pin->timestamp));
}
unset($pin);
あなたはプライベートアクセスと匿名関数の内部でオブジェクト自体($this
)をカプセル化したい場合は、これが不可能です。匿名関数のコンテキストには$this
が存在しないため(ただし、それ以降のPHPバージョンではその可能性があります)
しかし、回避策の1つは、use
句を使用してオブジェクトインスタンスを匿名関数のローカルスコープに渡すことです。
$_this = $this;
$callback = function (&$array) use ($_this) {
$array->timestamp = $_this->convertTime(strtotime($array->timestamp));
});
array_walk($pins, $callback);
$this
のプライベートメンバーはアクセスできないため、この回避策は制限されています。代わりに、あなたのオブジェクトの一部としてコールバック関数を作成し、それを指定することができ、プライベートアクセスがことが可能であり、あなたが他のオブジェクトのコールバックのようにそれを呼び出すことができます。
array_walk($pins, array($this, 'callback'));
foreach
があると言って先頭に戻って私をもたらしおそらくあなたの場合はarray_walk
よりも優れた武器です。
これは、さまざまな選択肢を示すのに役立ちます。
[この内部関数を取得する]の可能な複製(http://stackoverflow.com/questions/7206192/getting-this-inside-function) – hakre