トップページphp
198コメント63KB

さまざまな言語仕様について熱く語る闘技場

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/12/08(月) 13:15:56ID:???
ROUND 1開始!
0002nobodyさん2008/12/08(月) 13:19:45ID:???
PHPのarray()は関数です。以上
0003nobodyさん2008/12/08(月) 18:38:20ID:???
配列を作るたびに、いちいち
array
って、書かないといけないの、なんとかならないの?

perlだったら、

@a=(1,2,3,4,5);

これで、すぐに配列作れるのに。

なんで、いちいち、arrayとかって、
言ってあげないとわからないの?
それと、配列のくせに、シジルが$なのも
むかつきます。納得できません。
0004nobodyさん2008/12/08(月) 18:41:45ID:???
仕様です
0005nobodyさん2008/12/08(月) 19:01:20ID:???
arrayは関数ではありません。以上
0006nobodyさん2008/12/08(月) 19:02:23ID:???
無知乙
関数ですよ
キミはperlから入ってきたからPHPの仕様をよく知らないようだ
0007nobodyさん2008/12/08(月) 19:05:18ID:???
>>6
無知な君のために証拠を見せてあげてもいいが、
見せてくれって頼まれてもいないのに見せたんじゃ、
知恵の押し売りになっちまうからな。
結論だけ。
システム仕様としてPHPのarrayは関数ではありません。
0008nobodyさん2008/12/08(月) 20:32:22ID:???
>>6
無知乙
0009nobodyさん2008/12/08(月) 20:34:25ID:???
popって、配列関係の関数に決まってるのに、なんで
いちいち、わざわざ
array_pop
とかって、「array」を接頭辞につけるの?

pop、だけで十分、意味がわかるし、通じるじゃん。

実際、perlでは、「pop」だけで世の中回ってるよ?
0010nobodyさん2008/12/08(月) 20:45:50ID:???
perlしか知らないからそう思うのです
0011nobodyさん2008/12/09(火) 00:40:18ID:???
arrayは特殊ではあるが関数だよ

因みにissetやemptyは関数じゃない
0012nobodyさん2008/12/09(火) 07:17:29ID:???
>>11
システム内で関数として定義されていると考えてよいの?

システム内では関数ではないが、関数っぽい動作するから関数として考えてもいいっていう文脈ではなくて?
0013nobodyさん2008/12/10(水) 14:05:11ID:???
時代はwhitespaceですよ。
0014nobodyさん2008/12/10(水) 16:15:22ID:???
なにやら混乱があるようだけど、 array() は関数ではないよ。echo などと同
様、言語構成要素の一つ。

array($x, $y,) のように、array()は最後の引数のあとにも , を置くことがで
きる。
http://jp.php.net/manual/ja/function.array.php

これは、array()の評価のされ方が、関数と同じではないことを示している。一
般のユーザがPHPやCで関数を書いて、array()と同じ挙動をさせることはできな
い。このことから明らかに、array()はPHPの構文解析器そのものに組み込まれ
た言語構成要素。

また array()はコールバックとして他の関数に与えることもできない。
http://jp.php.net/manual/ja/language.pseudo-types.php
これもやはり、 array()が関数ではなく言語構成要素だから。LISPで言えば、
高階関数にスペシャルフォームを与えることはできないのと同じ。
0015nobodyさん2008/12/10(水) 16:17:25ID:???
>>9
> popって、配列関係の関数に決まってるのに、なんで
> いちいち、わざわざ
> array_pop
> とかって、「array」を接頭辞につけるの?

それはたぶん、PHPに名前空間がなかったから。
Perlにはパッケージがある。
0016nobodyさん2008/12/10(水) 19:03:12ID:???
>>14
言語構成要素の1つではあるが何故関数で無いと言いきれるんだ?
arrayの注意点にはこうある
注意: array()は、実際にはリテラル配列を表現するための 言語構成要素であり、通常の関数ではありません。 echoやissetはこうだ
注意: これは、関数ではなく言語構造のため、可変関数 を用いてコールすることはできません。
arrayは言語構成要素の1つではあるが
言語構造では無く特殊な関数と言うことじゃねぇの?
ここらへんの説明よろしく
0017nobodyさん2008/12/10(水) 19:04:48ID:???
>>14
言語構成要素の1つではあるが何故関数で無いと言いきれるんだ?

arrayの注意点にはこうある
注意: array()は、実際にはリテラル配列を表現するための 言語構成要素であり、通常の関数ではありません。

 echoやissetはこうだ
注意: これは、関数ではなく言語構造のため、可変関数 を用いてコールすることはできません。

arrayは言語構成要素の1つではあるが
言語構造では無く特殊な関数と言うことじゃねぇの?
ここらへんの説明よろしく

なんか改行が変になったので再
0018nobodyさん2008/12/10(水) 20:16:36ID:???
>>17
すまんが問われている意図がいまいちよくわからん。
逆に問い返させてくれ。

1. 「特殊な関数」って何だ?array()がその一つだと考えていることは分かっ
 たが、他にはどんなのがある?

自分の考えでは、PHPには「特殊な関数」というカテゴリはない。関数か、そう
でないかだ。

で、関数かどうかは、「関数のように評価され実行されるもの」が関数だ。
array()は、構文解析器に備わった、関数を評価する汎用的な仕組みでは評価で
きないから関数ではない。
array()を評価するためには、構文解析器にarray()専用の仕組みが必要だ。

2. 「言語構成要素」と「言語構造」の違いは何だ?PHPではどれが言語構成要
素で、どれが言語構造なんだ?

自分の考えでは、この二者に違いはない。いずれも、構文解析器に専用の仕組
みを必要とするものだ。
■ このスレッドは過去ログ倉庫に格納されています