さまざまな言語仕様について熱く語る闘技場at PHP
さまざまな言語仕様について熱く語る闘技場 - 暇つぶし2ch39:nobodyさん
08/12/10 22:46:02
言語構造か関数かは元のソースコードを見て判断するしかないだろ

40:nobodyさん
08/12/10 22:50:47
>>38
そういう言い方よくないと思うよ。彼(彼女)をきちんと納得させられないな
ら、むしろ自分たちがダメなんだと思う。

>>39
それは違う。ソースを読んだって、>>21と同じ情報が得られるだけだろう。

41:nobodyさん
08/12/10 22:57:43
だめなのは無知なのに理由もなく一方の主張を崩さず納得しない方だろ
疑問に思うなら自分で調べりゃいいのに

42:nobodyさん
08/12/10 22:59:45
>>37
できないかな

>>17に戻るけど
言語構成要素の1つではあるが何故関数で無いと言いきれるんだ?
言語構造の一部である事はマニュアルにも"言語構成要素であり"と書かれている

これらの原因がただ単にマニュアルの不備が原因である
とは考えにくいよ・・・
もしarrayのマニュアルがarrayが出来てから
更新されていないというのであればそれも有りえるだろうけど

43:nobodyさん
08/12/10 22:59:59
>>41
貴様もよく知らないくせに罵倒だけは一人前だなwwwwww

44:nobodyさん
08/12/10 23:01:51
パーサトークンという言葉を説明すればいいのかと思ってググったが、
PHPマニュアルばかり引っかかって、自分涙目。

弱ったな。どこかに分かりやすい説明ない?(他力本願)

自分はLISPのごく簡単な処理系を作ってみる以外の方法を思いつかないが、
あまりにも非現実的すぎる。
ここで納得してもらうためだけに最低限必要な知識ってなんだろう。


45:nobodyさん
08/12/10 23:05:31
さてと、パーサートークンなんてのは傍証に過ぎない。
なぜなら、パーサートークンかつ関数な特殊な関数である可能性を否定できないから。

しかし、おれはもっと確実にわかる方法を知っている。
もう少し、勉強したらいいよ諸君。

46:nobodyさん
08/12/10 23:08:18
わかる方法を書いてくれないかな
知ったかなんていらねーんだよ

47:nobodyさん
08/12/10 23:12:55
>>45
> なぜなら、パーサートークンかつ関数な特殊な関数である可能性を否定できないから。

えー、そういう話なの?
演算子はトークンだけど、実際には関数が割り当てられている、みたいな?
ここで問題になってるのは構文解析で、実装はまた別の話だと思ってたよ。


> しかし、おれはもっと確実にわかる方法を知っている。
> もう少し、勉強したらいいよ諸君。

勉強はがんばりますので、どうか教えてください。

48:nobodyさん
08/12/10 23:24:50
構文解析の話に絞ったのは君のハンドリングに過ぎない
45はロジックとして証明にならないといっているだけ

49:nobodyさん
08/12/10 23:35:07
システム上のことはコードで確認する。
文理上のことはドキュメントで確認するのが道理。

50:nobodyさん
08/12/10 23:44:02
結局のところ、話のレイヤーが違うってことだよな。
ドキュメント上は関数に分類されてて明確に否定されてないので関数であると考えるのが妥当。
ドキュメントはいろんな要件で書かれるからレイヤーの違いを理解できない人がいても仕方ないか。
システム上は判定一つ書けば結論でるしな。あれとか、それとか。

51:nobodyさん
08/12/10 23:46:15
高木さんならわかるんじゃないのかね

52:nobodyさん
08/12/10 23:51:08
で、システム上はこうよ
try {
ReflectionFunction::export("array");
} catch(Exception $e) {
echo $e->getMessage();
}

53:nobodyさん
08/12/10 23:52:01
ま、function_existsで調べればtrue falseで返してくれるわけだけど。

54:nobodyさん
08/12/10 23:54:32
>>51
高木さんじゃなくて、大垣さんのほうが確実

55:nobodyさん
08/12/11 00:02:45
ドキュメントもバグレポート出せば変わるから、
変わったその日から名実ともに関数じゃなくなるだろうね。

しかし、このルーズさというか曖昧さがPHPのいいところ
関数でも式でもないっていったって、言語構造っていったって、
if (include("test.php"))のreturnの扱いとか、特殊としか言いようがない。

56:nobodyさん
08/12/11 09:50:56
めんどくさいから海外のMLとに投稿したり開発元にメールして聞いてみたらいいんじゃないの

57:nobodyさん
08/12/11 10:07:48
そろそろ結論でたでしょ。
・言語解析上は、array()はT_ARRAYであって、T_FUNCTIONではない。
・一般に関数とは、引数が与えられて一定の結果を返すものという意味では関数
・ドキュメント上では関数に分類されているが、T_FUNCTIONではないという注釈がつく
・パーサートークンの中には式(≒関数)として評価されるものがいくつかある。
・中でもarrayは関数的性質が強い。(副作用が少なく線形写像的)
・よって、ドキュメント上の表記に差異がある。

結論は各自が導きだせばよい
例1)array()は言語解析上は関数ではないが、一般論的には関数に分類される。
例2)array()は広義では関数だが、厳密には関数ではない。
例3)PHPの話をするなら言語解析だけで十分なので関数ではない。
などなど。
事情を分かった上であれば、害はない。

58:nobodyさん
08/12/11 17:25:38
答えでてないじゃんあんたは例えだしてるだけでしょ

59:nobodyさん
08/12/11 17:45:58
お、そうかい?
> 結論は各自が導きだせばよい

結論 = f(事情);
fの定義によって結論が変わるというのがこの現象のすべてで
その例を出せば十分だろう。

60:nobodyさん
08/12/11 18:23:36
echoが文字を出力するという結論に代わりがないように
arrayもだせよ

61:nobodyさん
08/12/11 18:32:01
おいおい

> echoが文字を出力する

それは何の結論なんだよ

62:nobodyさん
08/12/11 18:34:06
例1 echoは文字を出力する
例2 echoは配列をarrayと出力する
例3 echoはカンマで区切って出力できる
例4 if (echo("hoge")) print("hoge");はパースエラー

63:nobodyさん
08/12/11 18:35:48
echo ってカンマ使えたの?

64:nobodyさん
08/12/11 20:23:19
PHPに文句あるなら、言う相手は開発元のZendだろ?
ここでグダグダ言っても、Zendには声が届かない。

…と思ったが、参考になりました^^

65:nobodyさん
08/12/11 20:52:34
zendって開発元だったの?
スポンサーじゃなかったっけ?

66:nobodyさん
08/12/11 21:02:47
perlってオープンソースなの?
perlがオープンソースだから
PHPをカンタンに作れたの?

67:nobodyさん
08/12/11 21:12:13
phpはCからできてますお

68:nobodyさん
08/12/12 06:06:09
まぁ、PerlがPHPやJSPのようにHTMLソースのインラインで実行できたら、
まぁ、もっと初心者を取り込めたかもしれないねぇ。
まぁ、CPANの仕組みをもう少し落ち着いて考えたらよかったかもねぇ。
まぁ、そうならなくてよかったと思ってるPerlerは多いかもしれないけど、
まぁ、・・・

69:nobodyさん
08/12/12 11:23:10
なんか詳しい人が多そうなので、聞いてみたいことがある。
PHPって、存在しないプロパティに値を代入すると、その場でプロパティが生ま
れるよね?

php -r '$hoge = new stdClass; $hoge->fuga = "ふがふが\n"; echo $hoge->fuga;'
=> ふがふが

これってPHPマニュアルのどこに書いてあるの?
オーバーロードの説明は読んだ。__set()の説明はあったけど、__set()の中身
が何もないデフォルトの場合の挙動の説明は見つけられなかった。
おかげでずっと、新しいプロパティが生まれていることに気づかなかった。


70:nobodyさん
08/12/12 14:04:46
>>69
質問はくだ質へ

71:nobodyさん
08/12/12 14:39:12
>>70
くだ質にはちょっと前に同じ質問がされてたんだよ。しかし回答はなかった。
たぶんPHPマニュアルには載ってないんだろう。

この辺の挙動を知っておかないとオーバーロードは理解できないのに、PHPマニュ
アルには載ってないんだとしたら、詳しい人たちはどうやってこれを知って理
解したのか聞きたいんだよ。

ちなみにPHPマニュアルのページ下のコメント欄みたいなところには載ってた。
しかしあそこはホントに玉石混交で、あそこにだけ載ってても意味ないだろ。


72:nobodyさん
08/12/12 14:47:03
>>71
ちょっと前の同じ質問ってどれ?

73:nobodyさん
08/12/12 14:53:17
>>72
今見てみたら、前スレの470だった。
スレリンク(php板:470番)
いろいろやり取りしてたけど、結局PHPマニュアルの当該URLは出てない。

74:nobodyさん
08/12/12 15:00:03
ふむ。これじゃない?
URLリンク(jp.php.net)

75:nobodyさん
08/12/12 15:15:12
>>74
違うってよ。俺は__set()がユーザによって定義されてない、素のオブジェクト
の挙動の話をしてんの。>>69のコード読んでよ。これはPHP4でも動くんだよ。

そのリンク先のは、
> $obj->a = 1;
> echo $obj->a . "\n\n";
とかやってるけど、これは全部PHP5以降の __set()と__get()が呼ばれてるだろ。


76:nobodyさん
08/12/12 15:27:30
ほらよ
URLリンク(jp.php.net)

77:nobodyさん
08/12/12 15:44:48
>>76
おお、ありがとう。しかしこれ微妙に違うんじゃね?

これは
1.「未定義の変数をクラスとして扱うとstdClassのインスタンスになる」
ことの説明であって、

2.「任意のインスタンスは、未定義のプロパティをセットできる」
ことの説明じゃないだろ?

もちろん2.を前提として1.が説明されているわけだけど、2.そのものの説明は
どっかにないの?


78:nobodyさん
08/12/12 15:46:13
屁理屈こねるやつだな

79:nobodyさん
08/12/12 15:52:28
実際違うんだから仕方がない。

80:nobodyさん
08/12/12 16:25:40
つうか、このオブジェクトの挙動について、元々知ってた人はどのくらいいる?
いるとしたら、どうやって知った?
これをPHPマニュアル読んで知った人って、一人でもいる?


81:nobodyさん
08/12/13 00:40:30
おお!勉強になります!もっとやれ!!!…いや、みんなで考えよう(・∀・)

82:nobodyさん
08/12/13 06:10:54
憶測:
PHPの由来はHTML文書中で簡単に<?php echo $hoge;?>するのが目的だったので、
変数は宣言せず、最初に代入等がおおなわれた時に作成される。
というのが基本仕様で、昔のマニュアルでは見かけたことがある。
これは、現在のマニュアルの「変数」のページにも
PHPでは変数を初期化する必要はないが、という控えめな表現で触れてある。

PHP4で導入されたクラス・オブジェクトでもそのことは変わらず、
メンバー変数の宣言はできるものの、実際のところ、代入によって
変数が育成されるという仕様に変更はなかった。

PHP5になって、public,protected,privateの区別を宣言できるようになったが、
宣言がない、もしくはvarで宣言された場合、PHP4互換となる。
また、PHP5ではクラス用のマジックメソッドが用意された。

これにより、宣言していないメンバー変数に対してオブジェクトからアクセスすると、
メンバー変数が作られるという"仕様"が結果的に発生する。
しかし、制御したい場合は__setでreturn null;なり例外を発生させることで、
宣言していないメンバー変数を使わせないというシステム仕様は実現できるので、
特に不自由することはない。

おもしろいのは、前者の仕様で運用すると、同じクラスから発生したオブジェクトなのに、
なのに、メンバー変数一覧に差異が生じ、get_object_varsでクエリを自動育成などを
やろうとすると、不具合の原因になるが、それは仕様の乱用と考えるのが妥当か。

ながーい、憶測ですんまそん。

83:nobodyさん
08/12/13 09:49:00
>PHPの由来はHTML文書中で簡単に<?php echo $hoge;?>するのが目的だったので、
>変数は宣言せず、最初に代入等がおおなわれた時に作成される。
<?php echo $hoge;?>これのどこが代入なんだ?

84:nobodyさん
08/12/13 11:53:59
>>83
> <?php echo $hoge;?>これのどこが代入なんだ?

どこに、それが代入だって書いてある?

85:nobodyさん
08/12/13 11:55:05
なんだこいつ

86:nobodyさん
08/12/13 15:53:42
変数宣言必須なコンパイラ環境でのリテラシーを持たないやつには、
インタプリタ環境での変数動的割り当てによる収穫について理解するのは難しい。

87:nobodyさん
08/12/14 02:27:01
みんなが使ってみたプログラミング言語は?

じゃあ、俺から。
C→Perl→Java→PHP→SQL→JavaScript→Excel VBA

次は、ActionScriptを勉強したいです。

88:nobodyさん
08/12/14 02:36:26
SQLってプログラミング言語なんだ

89:nobodyさん
08/12/14 05:58:30
>>87
ひどい順番だなw
SQLを使わずにJavaでなにやってんだかw
何一つ習得できなかったとかいう落ちはやめてくれよな
JS使えてればASなんて勉強するまでもない。

90:nobodyさん
08/12/14 11:49:11
>>88
プログラムは、「データ」とデータの「処理」から成り立っている。
一応SQLでも、処理(条件分岐とか)が書けるんだよね。

cf.日経ソフトウエア 2008年 03月号 p.55
分類/基礎となる計算モデル/事例
手続き型言語/チューリングマシン/C, Java
問い合わせ言語(非手続き型言語)/関係モデル/SQL
関数型言語(非手続き型言語)/ラムダ計算/Lisp, Haskell
論理型言語(非手続き型言語)/一階述語言語/Prolog

こういう知識って、学校の授業で勉強する場合は、計算科学やソフトウェア工学という科目で習うのかな?

91:nobodyさん
08/12/14 11:58:38
そんなんプログラミングするなら中学生にだって基礎知識だろ

92:nobodyさん
08/12/14 12:11:59
>>89
Javaはオブジェクト指向の教材として役立ちました!
…しょぼいアプレットが作れます><

ActionScript → Flash、Flex、AIRでWEBアプリを作る
広がる妄想(アイデア)が実現できれば、手段(プログラム言語)は何でもいいんだけど^^

93:nobodyさん
08/12/14 12:18:50
じゃphpで十分じゃん

94:nobodyさん
08/12/14 12:21:13
今の高校は「情報」という授業があるらしいね。
URLリンク(www.mext.go.jp)
=このスレのネタみたいに、関数がどうとか熱く語り合っているのかな?

量子コンピューターの設計とか、プログラミング言語をデザインするとか、
スーパーハッカーみたいな中学生ばかりだったら、技術立国日本の未来は明るいwww

95:nobodyさん
08/12/14 12:22:27
お前あほか。おっさん乙。

96:nobodyさん
08/12/14 12:29:48
Simple is best.
簡単にできることを複雑にやる必要はない。

=WEBアプリなら、既存の資産を活かしてPerl、PHPで十分

97:nobodyさん
08/12/14 12:40:36
C、アセンブラのおかげで、ハードの仕組みが理解できるようになった。
Javaのおかげで、オブジェクト指向の話が理解できるようになった。
WEBプログラミングのおかげで、サーバー、ネットワークの話が理解できるようになった。

<今後の課題>
1.デザインパターンのマスター
2.LISPやScheme等の関数型言語をマスター
3.将来実用化されるであろう量子コンピューターについて予習しておく

WEBアプリが自由自在に作れるようになったら、小遣い稼ぎのPHPは卒業だな!(・∀・)

98:nobodyさん
08/12/14 12:54:56
量子コンピューターってプログラミング言語っていうレイヤーじゃないよな?

おれはPHPのかたわら、Haskellで遊んでみたけど、目から鱗。
PHPコードも洗練されてくるからおもしろい。

99:nobodyさん
08/12/14 13:19:12
マスターとか言ってる奴がまともな技術と知識を持ってたためしがない

100:nobodyさん
08/12/14 17:24:38
他人の自分語りほどウザイものはないよね~

101:nobodyさん
08/12/14 22:02:13
俺が最初に覚えた言語はHTML。
その中でも、<body>に関しちゃ、ネイティブ?って言われることがある

102:nobodyさん
08/12/14 23:56:30
C>html>>>越えられない壁>>>php

103:nobodyさん
08/12/15 17:36:09
このまま糞スレ化→dat落ちさせるのは惜しいな。
PHPの言語仕様について話し合える場所は少ない。

104:nobodyさん
08/12/15 17:42:21
安心していいよ、このスレは残る
消えるのはお前だけだから

105:nobodyさん
08/12/16 22:48:52
HTMLは高級言語って話は聞いたことあるけどCSSって言語?

106:nobodyさん
08/12/16 22:52:43 9RkOzYwl
echoとprintは文字を出力することは同じなのに
なんで二つも同じことができるんですか?


107:nobodyさん
08/12/16 22:58:39
PHPスレのテンプレ

108:nobodyさん
08/12/16 23:02:16
テンプレの回答は求めてないですよ

109:nobodyさん
08/12/16 23:10:00
じゃ何を求めてんの?

110:nobodyさん
08/12/16 23:19:35
力…!!!

111:nobodyさん
08/12/19 21:04:10
CSSも、関数やらロジックを実装するようになってきたからなぁ。
叙事詩的定義もなにか新しいプログラミング言語のように感じる

112:nobodyさん
08/12/19 21:38:10
>>111
CSSの関数ってのはググったら見つかったけど、
例)CSS//関数
URLリンク(suika.fam.cx)

> 叙事詩的定義
ってのはぜんぜん見つからない。"epic(al) definition" でも該当なし。
詳細プリーズ。

113:nobodyさん
08/12/19 22:09:17
形容しただけだろ
日本語能力だいじょうぶか?

114:nobodyさん
08/12/19 22:39:27
で、形容するとどういう意味になるんだい?

115:nobodyさん
08/12/19 22:45:24
短文煽りは不快なだけで何も生み出さないからやめようぜ。
そのうち Kusakabe (void) みたいになっちまうぞ。

116:nobodyさん
08/12/19 23:04:19
>>113-114はストレスたまっててここで発散したいんです!

117:nobodyさん
08/12/19 23:06:25
>>106 に遅レス。

なんで echo と print の二つがあるかというと、まあ以下の文書に解説がある
わけだけど、

FAQTs - Knowledge Base - View Entry - What is the difference between echo and print?
URLリンク(www.faqts.com)

どうも読んでてまだるっこしい。

2番目とか、
「echo は文(statement)、printは式(expression)」
こう書いたら、ずっとスッキリすると思うんだが。

そういう専門用語を使いたくないのかもしれないが、statement やexpression
程度の簡単な概念すら避けて説明するのは間違っていると思う。

これは外部リンクだけど、PHPマニュアルは全体的にそんな印象。

118:nobodyさん
08/12/19 23:08:40
作った張本人たちもアバウトってことですね

119:nobodyさん
08/12/19 23:16:45
>>118
さすがに張本人は分かってなきゃ作れないだろ。
単にユーザへの説明の仕方の問題だと思う。


120:nobodyさん
08/12/20 10:04:15
本家のMLに参加して質問するのが近道ですね

121:nobodyさん
08/12/20 12:44:45
英語ができたらなあ。自然言語を書くのはは難しい...。

122:nobodyさん
08/12/20 12:46:50
プログラミングと英語はほとんど同じような気が・・・

123:nobodyさん
08/12/20 12:55:36



J

124:nobodyさん
08/12/20 12:56:40
そうかあ?自然言語は理詰めで書けないじゃないか。
文法だけ覚えても engrish.com に載るような英文しか書けない。

125:nobodyさん
08/12/20 13:28:24
PG言語も文法だけ覚えてもサンプルに載ってるような英文しか書けない。

126:nobodyさん
08/12/20 13:33:18
if (i = no money) {you are ogottekureru me}else{you are keti}

127:nobodyさん
08/12/20 15:55:32
まさか英語ができないやつとかいるの?

128:nobodyさん
08/12/20 15:56:26
お前だけだろ

129:nobodyさん
08/12/20 16:21:45
俺は英語ができると思ったことはないな。
一応、片言で会話したり、英語のドキュメントも
英文サイトは普通に読めるから不自由はしないけど、
英語で恋愛はできんw

130:nobodyさん
08/12/20 16:27:31
いや今話してるのは
メーリングリストに投稿するとか
その程度のレベルの話だから。

131:nobodyさん
08/12/20 16:28:39
お、そうか、>>120からの流れね。数レス前も読まずに書いて寸摩損

132:nobodyさん
08/12/20 16:45:53
どうやってMLに入会するのかもわからない
普通に申請するだけじゃだめみたいね

133:nobodyさん
08/12/20 16:58:17
入会の仕方書いてあるでしょ。
「英語」で(藁

134:nobodyさん
08/12/20 18:00:46
英語がわからないから入会方法がわからないって捉えられないとかゆとりですか?

135:nobodyさん
08/12/21 00:33:12
OK! well, let's talk in English here.

136:nobodyさん
08/12/21 00:34:49
このスレを見ている人はこんなスレも見ています。(ver 0.20)
pixiv自前イラスト向上スレ part7 [CG]
【ショタ】3次専ショタスレ 10【女装・美少年】 [Download]

... what are you interested in ? (^^;

137:nobodyさん
08/12/21 05:34:29
なんで学生時代に英語勉強しなかったの?

138:nobodyさん
08/12/21 05:54:32
俺はセンターで9割近くは取ったが、いまだに英語ができる気がしない。

All your base are belong to us - Wikipedia
URLリンク(ja.wikipedia.org)
これも解説を読まなきゃ分からんかった。

139:nobodyさん
08/12/21 05:58:34
英語のオンラインゲームできれば
「英語できる」と認定していいと思う

140:nobodyさん
08/12/22 01:06:32
I try to write the comment on program code from yesterday.
It's cooooool!!! ;-p

141:nobodyさん
08/12/28 21:22:18
「phpできます!」なんて自信たっぷりに言われた時の恥ずかしさ - ドグマを探しに
URLリンク(d.hatena.ne.jp)

> PHPのあれが駄目とかじゃなく、もし神様(何の?)が、今までのは無かった
> ことにしてPHPをどこでも3ヶ所直していいよっていったらどうするかっての
> を聞いてみたいです。

具体的な内容はリンク先を参照。この辺ほんとに直らんものかなあ。

142:nobodyさん
08/12/28 21:25:58
結局関数名と記法の話?

143:nobodyさん
08/12/28 21:43:51
>>142
違うだろ。


144:nobodyさん
08/12/28 22:07:40
別の話。

PHPでの内部変数の扱われ方 - PHP5のオブジェクトコピーでありがちな勘違い - PHPプロ!ニュース
URLリンク(www.phppro.jp)

コピーオンライト - Wikipedia
URLリンク(ja.wikipedia.org)

arrayはオブジェクトじゃないのでコピーオンライトは行われないかと思ったが、
実行時間を見ると、どうやらちゃんとコピーオンライトしているらしい。

~ $ time php -r '$a=range(0, 100000);'
0.069 secs
~ $ time php -r '$a=range(0, 100000); $b=$a;'
0.068 secs
~ $ time php -r '$a=range(0, 100000); $b=$a; $b[100]=0;'
0.117 secs


145:nobodyさん
08/12/28 22:13:34
>>143
どうして?


146:nobodyさん
08/12/28 22:17:57
$bの値を書き換えた後、実行時間が2倍近くになってるだろ。

147:nobodyさん
08/12/28 22:35:05
>>146
>>143

148:nobodyさん
08/12/28 22:44:54
違う?
じゃあどうして $b の一部を書き換えると、実行時間がこんなに延びんの?


149:nobodyさん
08/12/28 22:45:55
あ、環境書いてなかった。

~ $ php --version
PHP 5.2.6 (cli) (built: Sep 13 2008 11:13:29)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies


150:nobodyさん
08/12/28 22:55:23
つうかググればすぐ言及するページは見つかる。やっぱりcopy on write だ。

Big arrays in PHP
URLリンク(brian.moonspot.net)

> If the array is static then you don't really have to assign it by
> reference, since in PHP 5 all (non-object) variables are
> copy-on-write. So as long as you don't change the value then a copy
> isn't made.

php.netにはどこに書いてあるのか分からん。バグレポートばかり引っかかる。

151:nobodyさん
08/12/28 23:10:01
この辺の挙動はパフォーマンスに重大な影響を与えるのに、公式ドキュメント
には記述が見つからん。たぶん書いてないんだろう。

ライブラリの記述はそこそこだが言語仕様の記述は貧弱。こういうのがPHPの一
番直してほしいところだな。

152:nobodyさん
08/12/29 14:19:27
>>148
落ち着け。145は別の話だ。
そっちの話は143が説明できないようだが。

153:nobodyさん
09/01/02 03:08:35
Amazon.co.jp: はじめてのPHP言語プログラミング入門: 大垣 靖男: 本
URLリンク(www.amazon.co.jp)

どうやらこの本がおすすめらしい。
PHPの言語仕様についてきちんと扱った本だという。

154:nobodyさん
09/01/02 03:27:16
何時の本だよ
言語仕様そんならマニュアルで十分

155:nobodyさん
09/01/02 04:21:47
大垣氏の名前は覚えておいて損はないよ。

156:nobodyさん
09/01/02 04:29:37
なんで?

157:nobodyさん
09/01/02 12:56:51
印税欲しいから。

158:nobodyさん
09/01/02 16:53:02

  ,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;;   
  ヾ;;;ハ    ノ       .::!lリ;;r゙    在日の方々はかわいそうな強制連行の被害者
   `Z;i   〈.,_..,.      ノ;;;;;;;;>     
   ,;ぇハ、 、_,.ー-、_',.    ,f゙: Y;;f      そんなふうに考えていた時期が
   ~''戈ヽ   `二´    r'´:::. `!    俺にもありました

159:nobodyさん
09/01/11 18:25:25
最近、個人的に面白いと思った言語仕様があるのだが、ここに書いてる時間が
ないし、書いても長くてウザがられそうなので、クイズにしてみる。

「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のリンク先の記事 URLリンク(www.phppro.jp) が正しいかどうか、
問題があるとしたらどこか、考えてみよう。


160:nobodyさん
09/01/14 17:15:05
>>153
作者乙

161:nobodyさん
09/01/14 18:06:09
大垣センセがこんなとこくるわけないだろw

162:nobodyさん
09/01/14 18:38:30
>>161
おお、やっと大垣さんの名前を知っている人が来たか。

よかったら>>159の問題を見てってくれ。
誰にもやってもらえなくてさびしい。

163:nobodyさん
09/01/14 18:53:26
つうか、PHPのリファレンスって、要するにインスタンスに別名をつけることで、
仕組み自体はきわめて単純なものなんだよな。他言語で一般に言われるリファ
レンスと似ても似つかないだけで(俺だったら「エイリアス」とか命名したと
思う)。

わかりにくいのは、なんでPHPはこんな、他言語にはない奇妙な仕組みを必要と
するかだ。PHPのリファレンスはいつ、どのようなときに必要なのか。それを理
解するには、PHPの変数と各種インスタンスの挙動を理解する必要がある。

>>159のクイズは、まさにその辺の問題を扱っている。まあちょっと再帰を絡ま
せてしまったんで分かりにくくなってしまったが、再帰は枝葉で、本題にした
いのはそっちだ。


164:nobodyさん
09/01/14 18:59:55
>>162
その問題、最初に出現したときに解いて、全問正解だったよ。
でもそんなこと書いたって意味ないから書かなかっただけ。
いろんなところにコピペしなくていいよ。

165:nobodyさん
09/01/14 19:05:36
参照でおもしろいのは、引数を参照で受け取る関数で、
それがオブジェクトであることを期待してるのに、NULLだった場合とかに、
関数の中で何もしないのに、var_dumpすると再帰になるようなスクリプトで
別のメモリ領域にズレが生じるとか。

166:nobodyさん
09/01/14 19:09:11
>>164
ちょっと待て。これどこかにコピペされてんの?
俺はここと、くだ質スレ79にしか書き込んでないぞ。

まあそんなことはどうでもいいか。
全問正解とはすごいな。俺自身、Q1の最後から2番目は、自分でも動かしてみな
いと分からんかった。

どうやって勉強した?PHPマニュアルだけでは>>159は分からんと思うが。
参考にさせてほしい。

あとQ2の答えを、手短でいいから書いてみてくれないか?


167:nobodyさん
09/01/14 19:13:09
君見苦しいぞ

168:nobodyさん
09/01/14 19:13:20
>>165
> 関数の中で何もしないのに、var_dumpすると再帰になるようなスクリプトで

すまんがここの意味が分からん。
なんかコードの実例で示してもらえんか?

169:nobodyさん
09/01/14 19:17:29
>>167
意味不明。


170:nobodyさん
09/01/14 19:42:19
>>166
参照代入を行った場合のrefcountが違う

171:nobodyさん
09/01/14 22:04:23
見苦しい人がちょっといたほうが盛り上がるよ

172:nobodyさん
09/01/14 22:17:55
盛り下がっちゃったわけだが

173:nobodyさん
09/01/17 07:18:25
>>159
Q2の答えまだ~?

174:nobodyさん
09/02/08 20:48:24
緊急浮上あげ

175:nobodyさん
09/02/09 02:15:47
俺も大垣先生の本は分かりやすいと思った。
PHP6が出たら、改訂版の投入をお願いします!><
図書館で借りて読むけどw

176:nobodyさん
09/02/09 11:41:42
本人乙

177:nobodyさん
09/02/09 14:13:32
echo と print の厳密な違いを教えてください

178:nobodyさん
09/02/09 14:46:33
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さん
09/02/09 20:41:25
>>177
echo は、(カンマ)で区切って、連続で引数をぶちこめる。
printはできない。

180:nobodyさん
09/02/09 20:49:46
そうなるとprintなんて必要ないよな
配布スクリプトなんか覗くとprint使ってるやつがいるので不思議でたまらない

181:nobodyさん
09/02/09 21:10:42
printは成功すると1を返す。
echoは何も返さない。

182:nobodyさん
09/02/09 23:30:44
$a=1;

$a ? echo 'aaa' : echo 'bbb'; //error
$a ? print 'aaa' : print 'bbb'; //ok

183:nobodyさん
09/02/10 05:47:16
三項演算子の場合普通式の先頭から書かないか?

184:nobodyさん
09/02/10 06:33:49
一例ってことで


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch