falseとnull 追記
falseとnull 追記
false は boolean typeで、 null は null typeで、
boolean に 1 を代入すると true
boolean に 0 を代入すると false
null type は ナニもない事を示す つまり空
false == null とすれば、
0 == 空 とを比較してfalseと思った。
それかJavaのように文法違うぜ?ってエラー返すものだと思ってました。
trueになってビックリしたのですよ。
そりゃぁ。integer(10)とString(10)を比較したらtrueなんですよね。
null typeが存在するけどNullpointer Exception(ぬるぽ)が存在しないのでnull はfalseになるわけだ。
false(0) と null(0) を比較すればtrueですよね。よくよく考えれば当たり前だ。
でも
echo true;
> 1
で
echo false;
> (ナニもない)
boolean true が1 になることを思うと
boolean false はecho したときに 0 にならない
printするときはtoString()みたいな関数を使って、trueを文字列"1"に変換してるのかなと。
そう思いこんでしまっていた。
だからこの仕様には違和感がします。
int 0 を boolean に代入すると false になる。でもechoすると "" (空文字) になる。
型の扱いがいい加減なのは分るが、型をWrapするWrapperClassがないのですね。
プリミティブ型とそのラッパークラス、それから print 時の toString() 自動コール、これらこそJavaの特徴のだと勝手に思いこんでますので。
そんな理由でJavaとほぼ同じオブジェクト指向言語だと解説してる本がチョット許せなかった。(この辺が痛い文章になった原因)
よくよく考えてみると
falseがnullと同じ動作するのは直感で判断出来なかった。
null参照は ぬるぽ じゃないんですよね。(scriptなので当たり前だ)
print 時のtoString()の自動コールはオブジェクト指向じゃなくてJavaの言語仕様ですよね。
そういうことです。
香ばしい脳みそだな。俺の脳みそは。
Javaとほぼ同じオブジェクト指向言語だと解説してるっていうソースですか?
まるごとPHP! vol1 初版 (ページ50)ですね。
オブジェクトの参照渡しについて 追記
自分がよく分ってなかったです。
オブジェクトの参照渡しについて
http://itpro.nikkeibp.co.jp/members/ITPro/oss/20031031/1/
Java だと参照渡しです。
同じようにPHPも参照渡しです。
自分に問うた。そもそもオブジェクトって代入する機会は多い?
別インスタンスが欲しいときにコピーする機会は多い?
リスト1
$foo = new Hoge;
$foo2 = new Hoge;
リスト2
$foo = new Hoge;
$foo2 = $foo;
よくよく考えたらオブジェクトの代入は余り使わないのかもしれない。
新規オブジェクトが必要なときは、インスタンス作成なので、new する方が自然だったな。
リスト1のほうが、自然なのかもしれない。
このことに拘りすぎて検索してた私がバカだった気がします。