さまざまな言語仕様について熱く語る闘技場 (200レス)
上下前次1-新
1: 2008/12/08(月)13:15 ID:??? AAS
ROUND 1開始!
2: 2008/12/08(月)13:19 ID:??? AAS
PHPのarray()は関数です。以上
3: 2008/12/08(月)18:38 ID:??? AAS
配列を作るたびに、いちいち
array
って、書かないといけないの、なんとかならないの?
perlだったら、
@a=(1,2,3,4,5);
これで、すぐに配列作れるのに。
なんで、いちいち、arrayとかって、
省3
4: 2008/12/08(月)18:41 ID:??? AAS
仕様です
5: 2008/12/08(月)19:01 ID:??? AAS
arrayは関数ではありません。以上
6(2): 2008/12/08(月)19:02 ID:??? AAS
無知乙
関数ですよ
キミはperlから入ってきたからPHPの仕様をよく知らないようだ
7: 2008/12/08(月)19:05 ID:??? AAS
>>6
無知な君のために証拠を見せてあげてもいいが、
見せてくれって頼まれてもいないのに見せたんじゃ、
知恵の押し売りになっちまうからな。
結論だけ。
システム仕様としてPHPのarrayは関数ではありません。
8: 2008/12/08(月)20:32 ID:??? AAS
>>6
無知乙
9(1): 2008/12/08(月)20:34 ID:??? AAS
popって、配列関係の関数に決まってるのに、なんで
いちいち、わざわざ
array_pop
とかって、「array」を接頭辞につけるの?
pop、だけで十分、意味がわかるし、通じるじゃん。
実際、perlでは、「pop」だけで世の中回ってるよ?
10: 2008/12/08(月)20:45 ID:??? AAS
perlしか知らないからそう思うのです
11(1): 2008/12/09(火)00:40 ID:??? AAS
arrayは特殊ではあるが関数だよ
因みにissetやemptyは関数じゃない
12: 2008/12/09(火)07:17 ID:??? AAS
>>11
システム内で関数として定義されていると考えてよいの?
システム内では関数ではないが、関数っぽい動作するから関数として考えてもいいっていう文脈ではなくて?
13: 2008/12/10(水)14:05 ID:??? AAS
時代はwhitespaceですよ。
14(2): 2008/12/10(水)16:15 ID:??? AAS
なにやら混乱があるようだけど、 array() は関数ではないよ。echo などと同
様、言語構成要素の一つ。
array($x, $y,) のように、array()は最後の引数のあとにも , を置くことがで
きる。
外部リンク[php]:jp.php.net
これは、array()の評価のされ方が、関数と同じではないことを示している。一
般のユーザがPHPやCで関数を書いて、array()と同じ挙動をさせることはできな
省6
15: 2008/12/10(水)16:17 ID:??? AAS
>>9
> popって、配列関係の関数に決まってるのに、なんで
> いちいち、わざわざ
> array_pop
> とかって、「array」を接頭辞につけるの?
それはたぶん、PHPに名前空間がなかったから。
Perlにはパッケージがある。
16: 2008/12/10(水)19:03 ID:??? AAS
>>14
言語構成要素の1つではあるが何故関数で無いと言いきれるんだ?
arrayの注意点にはこうある
注意: array()は、実際にはリテラル配列を表現するための 言語構成要素であり、通常の関数ではありません。 echoやissetはこうだ
注意: これは、関数ではなく言語構造のため、可変関数 を用いてコールすることはできません。
arrayは言語構成要素の1つではあるが
言語構造では無く特殊な関数と言うことじゃねぇの?
省1
17(2): 2008/12/10(水)19:04 ID:??? AAS
>>14
言語構成要素の1つではあるが何故関数で無いと言いきれるんだ?
arrayの注意点にはこうある
注意: array()は、実際にはリテラル配列を表現するための 言語構成要素であり、通常の関数ではありません。
echoやissetはこうだ
注意: これは、関数ではなく言語構造のため、可変関数 を用いてコールすることはできません。
arrayは言語構成要素の1つではあるが
省3
18(1): 2008/12/10(水)20:16 ID:??? AAS
>>17
すまんが問われている意図がいまいちよくわからん。
逆に問い返させてくれ。
1. 「特殊な関数」って何だ?array()がその一つだと考えていることは分かっ
たが、他にはどんなのがある?
自分の考えでは、PHPには「特殊な関数」というカテゴリはない。関数か、そう
でないかだ。
省8
19: 2008/12/10(水)20:20 ID:??? AAS
もしかしたらいるかもしれない外野のために補足すると、自分はLISPの、関数
とスペシャルフォーム(特殊形式)の解析方法の違いを念頭に置いて書いている。
20(2): 2008/12/10(水)20:22 ID:??? AAS
そんな遠まわしに書かなくても、すっきり明快な答えの出し方がある。
もうすこし、関数を勉強してくれ、諸君。
21(5): 2008/12/10(水)20:26 ID:??? AAS
そんな些細な言葉の違いを言うなら原文ではどっちもlanguage construct。
パーサトークンであり構文。
外部リンク[php]:jp.php.net
注釈が違うのはそもそも何かを処理するものでもない
arrayを可変コールすることなんざまずないからじゃね。
22(1): 2008/12/10(水)20:38 ID:??? AAS
>>20
すまんがどっちを批判しているのか分からんかった。自分はSICPとか読んでる
けど、まだ分かってかもと不安になっちゃったよ。
しかし、普通のプログラマが「関数」という概念そのものを勉強するメリットっ
て、なかなか見えないだろうし、見えないと勉強しないと思うんだが。
>>21
おお、なんと明快な答えだ!
省2
23(1): 2008/12/10(水)20:40 ID:??? AAS
>>18
> 自分の考えでは、PHPには「特殊な関数」というカテゴリはない。
> 関数か、そうでないかだ。
特殊関数 つ 外部リンク[php]:jp.php.net
24(1): 20 2008/12/10(水)20:41 ID:??? AAS
>>22
どちらか片方を批判してるわけじゃない。
簡単に結論が出る内容を、よくわかってない者同士が、状況証拠を
並べ立ててワーギャーやってるので、書いてみた
25(1): 2008/12/10(水)20:51 ID:??? AAS
>>23
なんだ、特殊関数という用語があるのか。
しかしそれはぜんぜん文脈が違う。__sleepや__wakeupは、特定の機会に必ずコー
ルされるというだけで、評価の仕組み自体は通常の関数となんら変わらない。
>>24
それは失礼した。また恥をかいてしまったが、あなたのおかげで勉強になりま
した。ありがとう。
26(1): 2008/12/10(水)20:56 ID:??? AAS
>>25
おれは何も勉強させたつもりはないし、有用な情報は提示していないが?
特殊関数といっても、普通はマジックメソッドってみんな言ってるやつを
訳者が特殊関数って書いてるだけだと思う。
だからどうということはないが。
27(1): 2008/12/10(水)21:10 ID:??? AAS
>>26
まあ勝手に感謝されたら気持ちが悪いかもしれないが、情報の価値はその受け
手が決めるもんです。PHP入門者の自分はまさにその情報を欲していた。
つうかあなたが「くだ質」スレに登場してたら、話は早かったのになあ。
2chスレ:php
2chスレ:php
まあ自分はあっちのスレには書いてないけど。
省1
28(1): 2008/12/10(水)21:17 ID:??? AAS
>>27
理解したのなら俺にどちらなのか教えてくれ
もし関数でなく言語構造というのであれば
何故態々”通常の”関数ではありません。 と書いてあるのか
29(2): 2008/12/10(水)21:51 ID:??? AAS
>>28
うん、関数ではなくて言語構造。>>21氏のとおり、パーサトークン一覧に載っ
ているから明らか。
"通常の" 関数(regular function) と書いている理由は分からんけど、自分は
これは、通常の関数のほかに特殊な関数があるのではなくて、関数というもの
は(みんな)通常、arrayは関数でない特殊なもの、と書いてるだけだと思う。
30(1): 2008/12/10(水)22:08 ID:??? AAS
>>29
特殊な物なら何故通常のと態々つけるの?
echoやincludeも()つけて書けて関数のような形に見えるけど
それぞれの説明にちゃんと言語構造ですと書いてあり通常のとは書いて無いよ?
31(1): 2008/12/10(水)22:19 ID:??? AAS
>>30
でも>>29のように、関数を通常、関数以外を特殊という読解もできるよね?
もちろんあなたの言うようにも読める。原文の記述があいまいなんだよ。
で、決定的根拠は>>21。
32: 2008/12/10(水)22:21 ID:??? AAS
日本語訳した野郎の勝手な解釈が含まれてるってことだお
33(1): 2008/12/10(水)22:24 ID:??? AAS
[arrayは言語構造なの!] 攻撃:95 素早さ:40 防御:37 命中:83 運:43 HP:200
[arrayは関数だゴルァ!] 攻撃:28 素早さ:65 防御:37 命中:52 運:21 HP:163
arrayは言語構造なの! vs arrayは関数だゴルァ! 戦闘開始!!
[arrayは関数だゴルァ!]の攻撃 HIT [arrayは言語構造なの!]は1のダメージを受けた。
[arrayは言語構造なの!]の攻撃 HIT [arrayは関数だゴルァ!]は169のダメージを受けた。
[arrayは言語構造なの!]が[arrayは関数だゴルァ!]を倒しました(ラウンド数:1)。
34: 2008/12/10(水)22:26 ID:??? AAS
いや、原文があいまい。訳者は責められんと思う。
> Note: array() is a language construct used to represent literal
> arrays, and not a regular function.
35(1): 2008/12/10(水)22:34 ID:??? AAS
>>31
関数以外を特殊と言うのであれば
何故issetやemptyあとlist等に通常と言う言葉が無いのさ
arrayだけ別の表現をする意味が無いよね
しかもだ
言語構成要素であり、通常の関数ではありません。
と言語構成要素という言葉があるの通常の関数ではないと
省1
36: 2008/12/10(水)22:35 ID:??? AAS
>>33
...。
あんまり勝負って考え方は好きじゃないなあ。
みんなが正しい結論に到達して、みんなが得した、と考える方がよくない?
まあスレタイ通りではあるけど。
37(1): 2008/12/10(水)22:40 ID:??? AAS
>>35
だからそれはPHPマニュアルの表記の不備だろうってば。
つうか、array はパーサトークンの一つだと>>21で示されて、それでも状況証
拠を主張し続ける理由が分からない。
パーサトークンという言葉だけでは、あなたは納得できない?
38(1): 2008/12/10(水)22:45 ID:??? AAS
顔真っ赤にして
2chスレ:php
を否定してた奴涙目?
961の時点で正解出てるのに土曜日から今までほんとに何やってんだ
39(1): 2008/12/10(水)22:46 ID:??? AAS
言語構造か関数かは元のソースコードを見て判断するしかないだろ
40: 2008/12/10(水)22:50 ID:??? AAS
>>38
そういう言い方よくないと思うよ。彼(彼女)をきちんと納得させられないな
ら、むしろ自分たちがダメなんだと思う。
>>39
それは違う。ソースを読んだって、>>21と同じ情報が得られるだけだろう。
41(1): 2008/12/10(水)22:57 ID:??? AAS
だめなのは無知なのに理由もなく一方の主張を崩さず納得しない方だろ
疑問に思うなら自分で調べりゃいいのに
42: 2008/12/10(水)22:59 ID:??? AAS
>>37
できないかな
>>17に戻るけど
言語構成要素の1つではあるが何故関数で無いと言いきれるんだ?
言語構造の一部である事はマニュアルにも"言語構成要素であり"と書かれている
これらの原因がただ単にマニュアルの不備が原因である
とは考えにくいよ・・・
省2
43: 2008/12/10(水)22:59 ID:??? AAS
>>41
貴様もよく知らないくせに罵倒だけは一人前だなwwwwww
44: 2008/12/10(水)23:01 ID:??? AAS
パーサトークンという言葉を説明すればいいのかと思ってググったが、
PHPマニュアルばかり引っかかって、自分涙目。
弱ったな。どこかに分かりやすい説明ない?(他力本願)
自分はLISPのごく簡単な処理系を作ってみる以外の方法を思いつかないが、
あまりにも非現実的すぎる。
ここで納得してもらうためだけに最低限必要な知識ってなんだろう。
45(1): 2008/12/10(水)23:05 ID:??? AAS
さてと、パーサートークンなんてのは傍証に過ぎない。
なぜなら、パーサートークンかつ関数な特殊な関数である可能性を否定できないから。
しかし、おれはもっと確実にわかる方法を知っている。
もう少し、勉強したらいいよ諸君。
46: 2008/12/10(水)23:08 ID:??? AAS
わかる方法を書いてくれないかな
知ったかなんていらねーんだよ
47: 2008/12/10(水)23:12 ID:??? AAS
>>45
> なぜなら、パーサートークンかつ関数な特殊な関数である可能性を否定できないから。
えー、そういう話なの?
演算子はトークンだけど、実際には関数が割り当てられている、みたいな?
ここで問題になってるのは構文解析で、実装はまた別の話だと思ってたよ。
> しかし、おれはもっと確実にわかる方法を知っている。
> もう少し、勉強したらいいよ諸君。
省1
48: 2008/12/10(水)23:24 ID:??? AAS
構文解析の話に絞ったのは君のハンドリングに過ぎない
45はロジックとして証明にならないといっているだけ
49: 2008/12/10(水)23:35 ID:??? AAS
システム上のことはコードで確認する。
文理上のことはドキュメントで確認するのが道理。
50: 2008/12/10(水)23:44 ID:??? AAS
結局のところ、話のレイヤーが違うってことだよな。
ドキュメント上は関数に分類されてて明確に否定されてないので関数であると考えるのが妥当。
ドキュメントはいろんな要件で書かれるからレイヤーの違いを理解できない人がいても仕方ないか。
システム上は判定一つ書けば結論でるしな。あれとか、それとか。
51(1): 2008/12/10(水)23:46 ID:??? AAS
高木さんならわかるんじゃないのかね
52: 2008/12/10(水)23:51 ID:??? AAS
で、システム上はこうよ
try {
ReflectionFunction::export("array");
} catch(Exception $e) {
echo $e->getMessage();
}
53: 2008/12/10(水)23:52 ID:??? AAS
ま、function_existsで調べればtrue falseで返してくれるわけだけど。
54: 2008/12/10(水)23:54 ID:??? AAS
>>51
高木さんじゃなくて、大垣さんのほうが確実
55: 2008/12/11(木)00:02 ID:??? AAS
ドキュメントもバグレポート出せば変わるから、
変わったその日から名実ともに関数じゃなくなるだろうね。
しかし、このルーズさというか曖昧さがPHPのいいところ
関数でも式でもないっていったって、言語構造っていったって、
if (include("test.php"))のreturnの扱いとか、特殊としか言いようがない。
56: 2008/12/11(木)09:50 ID:??? AAS
めんどくさいから海外のMLとに投稿したり開発元にメールして聞いてみたらいいんじゃないの
57: 2008/12/11(木)10:07 ID:??? AAS
そろそろ結論でたでしょ。
・言語解析上は、array()はT_ARRAYであって、T_FUNCTIONではない。
・一般に関数とは、引数が与えられて一定の結果を返すものという意味では関数
・ドキュメント上では関数に分類されているが、T_FUNCTIONではないという注釈がつく
・パーサートークンの中には式(≒関数)として評価されるものがいくつかある。
・中でもarrayは関数的性質が強い。(副作用が少なく線形写像的)
・よって、ドキュメント上の表記に差異がある。
省6
58: 2008/12/11(木)17:25 ID:??? AAS
答えでてないじゃんあんたは例えだしてるだけでしょ
59: 2008/12/11(木)17:45 ID:??? AAS
お、そうかい?
> 結論は各自が導きだせばよい
結論 = f(事情);
fの定義によって結論が変わるというのがこの現象のすべてで
その例を出せば十分だろう。
60: 2008/12/11(木)18:23 ID:??? AAS
echoが文字を出力するという結論に代わりがないように
arrayもだせよ
61: 2008/12/11(木)18:32 ID:??? AAS
おいおい
> echoが文字を出力する
それは何の結論なんだよ
62: 2008/12/11(木)18:34 ID:??? AAS
例1 echoは文字を出力する
例2 echoは配列をarrayと出力する
例3 echoはカンマで区切って出力できる
例4 if (echo("hoge")) print("hoge");はパースエラー
63: 2008/12/11(木)18:35 ID:??? AAS
echo ってカンマ使えたの?
64: 2008/12/11(木)20:23 ID:??? AAS
PHPに文句あるなら、言う相手は開発元のZendだろ?
ここでグダグダ言っても、Zendには声が届かない。
…と思ったが、参考になりました^^
65: 2008/12/11(木)20:52 ID:??? AAS
zendって開発元だったの?
スポンサーじゃなかったっけ?
66: 2008/12/11(木)21:02 ID:??? AAS
perlってオープンソースなの?
perlがオープンソースだから
PHPをカンタンに作れたの?
67: 2008/12/11(木)21:12 ID:??? AAS
phpはCからできてますお
68: 2008/12/12(金)06:06 ID:??? AAS
まぁ、PerlがPHPやJSPのようにHTMLソースのインラインで実行できたら、
まぁ、もっと初心者を取り込めたかもしれないねぇ。
まぁ、CPANの仕組みをもう少し落ち着いて考えたらよかったかもねぇ。
まぁ、そうならなくてよかったと思ってるPerlerは多いかもしれないけど、
まぁ、・・・
69(2): 2008/12/12(金)11:23 ID:??? AAS
なんか詳しい人が多そうなので、聞いてみたいことがある。
PHPって、存在しないプロパティに値を代入すると、その場でプロパティが生ま
れるよね?
php -r '$hoge = new stdClass; $hoge->fuga = "ふがふが\n"; echo $hoge->fuga;'
=> ふがふが
これってPHPマニュアルのどこに書いてあるの?
オーバーロードの説明は読んだ。__set()の説明はあったけど、__set()の中身
省2
70(1): 2008/12/12(金)14:04 ID:??? AAS
>>69
質問はくだ質へ
71(1): 2008/12/12(金)14:39 ID:??? AAS
>>70
くだ質にはちょっと前に同じ質問がされてたんだよ。しかし回答はなかった。
たぶんPHPマニュアルには載ってないんだろう。
この辺の挙動を知っておかないとオーバーロードは理解できないのに、PHPマニュ
アルには載ってないんだとしたら、詳しい人たちはどうやってこれを知って理
解したのか聞きたいんだよ。
ちなみにPHPマニュアルのページ下のコメント欄みたいなところには載ってた。
省1
72(1): 2008/12/12(金)14:47 ID:??? AAS
>>71
ちょっと前の同じ質問ってどれ?
73: 2008/12/12(金)14:53 ID:??? AAS
>>72
今見てみたら、前スレの470だった。
2chスレ:php
いろいろやり取りしてたけど、結局PHPマニュアルの当該URLは出てない。
74(1): 2008/12/12(金)15:00 ID:??? AAS
ふむ。これじゃない?
外部リンク[php]:jp.php.net
75: 2008/12/12(金)15:15 ID:??? AAS
>>74
違うってよ。俺は__set()がユーザによって定義されてない、素のオブジェクト
の挙動の話をしてんの。>>69のコード読んでよ。これはPHP4でも動くんだよ。
そのリンク先のは、
> $obj->a = 1;
> echo $obj->a . "\n\n";
とかやってるけど、これは全部PHP5以降の __set()と__get()が呼ばれてるだろ。
76(1): 2008/12/12(金)15:27 ID:??? AAS
ほらよ
外部リンク[php]:jp.php.net
77: 2008/12/12(金)15:44 ID:??? AAS
>>76
おお、ありがとう。しかしこれ微妙に違うんじゃね?
これは
1.「未定義の変数をクラスとして扱うとstdClassのインスタンスになる」
ことの説明であって、
2.「任意のインスタンスは、未定義のプロパティをセットできる」
ことの説明じゃないだろ?
省2
78: 2008/12/12(金)15:46 ID:??? AAS
屁理屈こねるやつだな
79: 2008/12/12(金)15:52 ID:??? AAS
実際違うんだから仕方がない。
80: 2008/12/12(金)16:25 ID:??? AAS
つうか、このオブジェクトの挙動について、元々知ってた人はどのくらいいる?
いるとしたら、どうやって知った?
これをPHPマニュアル読んで知った人って、一人でもいる?
81: 2008/12/13(土)00:40 ID:??? AAS
おお!勉強になります!もっとやれ!!!…いや、みんなで考えよう(・∀・)
上下前次1-新書関写板覧索設栞歴
あと 119 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.300s*