- 1 名前:nobodyさん mailto:sage [2008/12/08(月) 13:15:56 ID:???]
- ROUND 1開始!
- 159 名前:nobodyさん mailto:sage [2009/01/11(日) 18:25:25 ID:???]
- 最近、個人的に面白いと思った言語仕様があるのだが、ここに書いてる時間が
ないし、書いても長くてウザがられそうなので、クイズにしてみる。 「PHP言語仕様・力試しクイズ」 $ php -r '$a=array(); $a["a"]= $a; var_dump($a);' $ php -r '$a=array(); $a["a"]=&$a; var_dump($a);' $ php -r '$a=new stdClass; $a->a= $a; var_dump($a);' $ php -r '$a=new stdClass; $a->a=&$a; var_dump($a);' (以下は PHP5(以上)でしか動かない) $ php -r '$a=new stdClass; $a->a= clone $a; var_dump($a);' $ php -r '$a=new ArrayObject(array()); $a["a"]= $a; var_dump($a);' $ php -r '$a=new ArrayObject(array()); $a["a"]=&$a; var_dump($a);' $ php -r '$a=new ArrayObject(array()); $a["a"]= clone $a; var_dump($a);' Q1 これらのコードが、PHP4とPHP5で、それぞれどのような表示をするか、試して みよう。自信のある人は試す前に予想してみよう。 Q2 >>144のリンク先の記事 www.phppro.jp/news/304 が正しいかどうか、 問題があるとしたらどこか、考えてみよう。
- 160 名前:nobodyさん mailto:sage [2009/01/14(水) 17:15:05 ID:???]
- >>153
作者乙
- 161 名前:nobodyさん mailto:sage [2009/01/14(水) 18:06:09 ID:???]
- 大垣センセがこんなとこくるわけないだろw
- 162 名前:nobodyさん mailto:sage [2009/01/14(水) 18:38:30 ID:???]
- >>161
おお、やっと大垣さんの名前を知っている人が来たか。 よかったら>>159の問題を見てってくれ。 誰にもやってもらえなくてさびしい。
- 163 名前:nobodyさん mailto:sage [2009/01/14(水) 18:53:26 ID:???]
- つうか、PHPのリファレンスって、要するにインスタンスに別名をつけることで、
仕組み自体はきわめて単純なものなんだよな。他言語で一般に言われるリファ レンスと似ても似つかないだけで(俺だったら「エイリアス」とか命名したと 思う)。 わかりにくいのは、なんでPHPはこんな、他言語にはない奇妙な仕組みを必要と するかだ。PHPのリファレンスはいつ、どのようなときに必要なのか。それを理 解するには、PHPの変数と各種インスタンスの挙動を理解する必要がある。 >>159のクイズは、まさにその辺の問題を扱っている。まあちょっと再帰を絡ま せてしまったんで分かりにくくなってしまったが、再帰は枝葉で、本題にした いのはそっちだ。
- 164 名前:nobodyさん mailto:sage [2009/01/14(水) 18:59:55 ID:???]
- >>162
その問題、最初に出現したときに解いて、全問正解だったよ。 でもそんなこと書いたって意味ないから書かなかっただけ。 いろんなところにコピペしなくていいよ。
- 165 名前:nobodyさん mailto:sage [2009/01/14(水) 19:05:36 ID:???]
- 参照でおもしろいのは、引数を参照で受け取る関数で、
それがオブジェクトであることを期待してるのに、NULLだった場合とかに、 関数の中で何もしないのに、var_dumpすると再帰になるようなスクリプトで 別のメモリ領域にズレが生じるとか。
- 166 名前:nobodyさん mailto:sage [2009/01/14(水) 19:09:11 ID:???]
- >>164
ちょっと待て。これどこかにコピペされてんの? 俺はここと、くだ質スレ79にしか書き込んでないぞ。 まあそんなことはどうでもいいか。 全問正解とはすごいな。俺自身、Q1の最後から2番目は、自分でも動かしてみな いと分からんかった。 どうやって勉強した?PHPマニュアルだけでは>>159は分からんと思うが。 参考にさせてほしい。 あとQ2の答えを、手短でいいから書いてみてくれないか?
- 167 名前:nobodyさん mailto:sage [2009/01/14(水) 19:13:09 ID:???]
- 君見苦しいぞ
- 168 名前:nobodyさん mailto:sage [2009/01/14(水) 19:13:20 ID:???]
- >>165
> 関数の中で何もしないのに、var_dumpすると再帰になるようなスクリプトで すまんがここの意味が分からん。 なんかコードの実例で示してもらえんか?
- 169 名前:nobodyさん mailto:sage [2009/01/14(水) 19:17:29 ID:???]
- >>167
意味不明。
- 170 名前:nobodyさん mailto:sage [2009/01/14(水) 19:42:19 ID:???]
- >>166
参照代入を行った場合のrefcountが違う
- 171 名前:nobodyさん mailto:sage [2009/01/14(水) 22:04:23 ID:???]
- 見苦しい人がちょっといたほうが盛り上がるよ
- 172 名前:nobodyさん mailto:sage [2009/01/14(水) 22:17:55 ID:???]
- 盛り下がっちゃったわけだが
- 173 名前:nobodyさん mailto:sage [2009/01/17(土) 07:18:25 ID:???]
- >>159
Q2の答えまだ〜?
- 174 名前:nobodyさん mailto:あげ [2009/02/08(日) 20:48:24 ID:???]
- 緊急浮上あげ
- 175 名前:nobodyさん mailto:sage [2009/02/09(月) 02:15:47 ID:???]
- 俺も大垣先生の本は分かりやすいと思った。
PHP6が出たら、改訂版の投入をお願いします!>< 図書館で借りて読むけどw
- 176 名前:nobodyさん mailto:sage [2009/02/09(月) 11:41:42 ID:???]
- 本人乙
- 177 名前:nobodyさん mailto:age [2009/02/09(月) 14:13:32 ID:???]
- echo と print の厳密な違いを教えてください
- 178 名前:nobodyさん mailto:sage [2009/02/09(月) 14:46:33 ID:???]
- void zend_do_print(znode *result, znode *arg TSRMLS_DC)
{ zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->result.op_type = IS_TMP_VAR; opline->result.u.var = get_temporary_variable(CG(active_op_array)); opline->opcode = ZEND_PRINT; opline->op1 = *arg; SET_UNUSED(opline->op2); *result = opline->result; } void zend_do_echo(znode *arg TSRMLS_DC) { zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->opcode = ZEND_ECHO; opline->op1 = *arg; SET_UNUSED(opline->op2); }
- 179 名前:nobodyさん mailto:sage [2009/02/09(月) 20:41:25 ID:???]
- >>177
echo は、(カンマ)で区切って、連続で引数をぶちこめる。 printはできない。
- 180 名前:nobodyさん mailto:sage [2009/02/09(月) 20:49:46 ID:???]
- そうなるとprintなんて必要ないよな
配布スクリプトなんか覗くとprint使ってるやつがいるので不思議でたまらない
- 181 名前:nobodyさん mailto:sage [2009/02/09(月) 21:10:42 ID:???]
- printは成功すると1を返す。
echoは何も返さない。
- 182 名前:nobodyさん mailto:sage [2009/02/09(月) 23:30:44 ID:???]
- $a=1;
$a ? echo 'aaa' : echo 'bbb'; //error $a ? print 'aaa' : print 'bbb'; //ok
- 183 名前:nobodyさん mailto:sage [2009/02/10(火) 05:47:16 ID:???]
- 三項演算子の場合普通式の先頭から書かないか?
- 184 名前:nobodyさん mailto:sage [2009/02/10(火) 06:33:49 ID:???]
- 一例ってことで
|

|