ちょっと前に、参照渡しが盛り上がりましたね。
参照渡しというか、参照の値渡しがどうもしっくりこなくて。
ちょっとPHPで書いてみます。
これを最初に見た時の感想は、
「プロパティが変わってる! そうか、これは参照渡しなんだ!」では断じてなくて、
「なんで値渡しなのに関数の外で変わってんだよ!」だったのですが。
$a = new stdClass();
$a->hoge = 5;
$a->fuga = 10;
var_dump($a);
func($a);
var_dump($a);
function func($a){
$a->hoge = 6;
}
class stdClass#1 (2) {
public $hoge =>
int(5)
public $fuga =>
int(10)
}
class stdClass#1 (2) {
public $hoge =>
int(6)
public $fuga =>
int(10)
}
$a = new stdClass();
$a->hoge = 5;
$a->fuga = 10;
var_dump($a);
func($a);
var_dump($a);
function func($a){
$a = new stdClass();
$a->hoge = 6;
$a->fuga = 11;
}
class stdClass#1 (2) {
public $hoge =>
int(5)
public $fuga =>
int(10)
}
class stdClass#1 (2) {
public $hoge =>
int(5)
public $fuga =>
int(10)
}
むしろこれが普通だろ、値渡しなんだから。と思っていたけど、そうすると、なんで①は変わってしまうの??? って状態だった。
色々な記事をみて、「参照渡し」と、「参照の値渡し」というのがあるってのはわかって、なんとなく、ぼやーっとはわかったような、わからないような。
②が普通だと思っていたのに、①を見てから②を見ると、なんか変というか、
まるで、newした瞬間に何かが起こったような、突然変異でも起きたの? みたいなもやもやがあった。
けど、下のコードを思い至って、少しスッキリした。
とどのつまり、実際、結局、newした瞬間に何かが起こったわけだ。
参照値が変わった、ということなのかな?
$a = new stdClass();
$a->hoge = 5;
$a->fuga = 10;
var_dump($a);
func($a);
var_dump($a);
function func($a){
$a->hoge = 0;
$a = new stdClass();
$a->hoge = 6;
$a->fuga = 11;
}
class stdClass#1 (2) {
public $hoge =>
int(5)
public $fuga =>
int(10)
}
class stdClass#1 (2) {
public $hoge =>
int(0)
public $fuga =>
int(10)
}
なんで、みんな①と②だけ説明して、このコードを書いてくれなかったんだろう。(見つけてないだけで書いてるのかな?)
……みんな①と②だけでわかるのか。俺の頭がわるいのか。
逆にこれを見て、何がわかったのかわからない、という人の方が多いのかも。
なんというか、これをうまく言語化できない。
うまく言語化できそうになったら書き直す。(かもしれない)
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント