トップページtech
981コメント306KB

PHPがいかに駄目言語であるかをちゃんと説明

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/11/15(金) 20:57:08.46
age推奨で

他の言語と比較しながら、具体的にちゃんと説明してください!
0002デフォルトの名無しさん2013/11/15(金) 21:27:16.50
PHPの欠点
http://blog.webcreativepark.net/2008/01/31-010847.html
0003デフォルトの名無しさん2013/11/15(金) 22:37:59.66
PHPっていうか、動的型の言語がだめだわ。
facebookは拡張して型チェック付のPHP使ってるらしいね。
0004デフォルトの名無しさん2013/11/15(金) 23:23:56.39
>>2
それ古すぎるんだわ。新しいのないの?
0005デフォルトの名無しさん2013/11/16(土) 00:44:51.86
PHPがダメ言語な理由

* 配列ごときで、arrayの荒らし
* クロージャーがない
* mixinがない
0006デフォルトの名無しさん2013/11/16(土) 01:23:08.43
Rubyよりはマシ
0007デフォルトの名無しさん2013/11/16(土) 04:52:34.09
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
00085992013/11/16(土) 07:58:54.52
>>5
それ古すぎるんだわ。新しいのないの?
0009デフォルトの名無しさん2013/11/16(土) 08:47:14.99
>>8
探してこい
0010デフォルトの名無しさん2013/11/16(土) 08:53:36.29
現状に即してないもの上げるのやめようよ

ここってPHPを賛美するスレではないよな?
そうだったら勘違い
0011デフォルトの名無しさん2013/11/16(土) 10:57:52.93
3Bはダメでも5Aならなんとか
0012デフォルトの名無しさん2013/11/16(土) 11:02:15.35
PHPerだけど
全ての関数をオブジェクト化するべきだと思う
こんなかんじ
strpos -> string->pos
str_replace -> string->replace
あと引数の順番も整理しておくべき
0013デフォルトの名無しさん2013/11/16(土) 11:02:45.85
相互リンク

【PHP】下らねぇ質問はID出して書き込みやがれ 131
http://kohada.2ch.net/test/read.cgi/php/1384065969/
0014デフォルトの名無しさん2013/11/16(土) 11:07:41.15
PHPがダメなのは
・引数の順番に統一感がなくリファレンスに頼りがちになる
・戻り値が0とfalseを返すものがあり区別が面倒

これらは最新版でも変わってない
0015デフォルトの名無しさん2013/11/16(土) 11:09:47.24
>>12
0016デフォルトの名無しさん2013/11/16(土) 11:10:22.14
全く触ったこと無いけど
いざという時にだけ取り出して使うサブ武器としてもふさわしくないようにみえるな
0017デフォルトの名無しさん2013/11/16(土) 11:23:00.30
>>16
CUIで使うならRubyかPythonのがふさわしいしな
0018デフォルトの名無しさん2013/11/16(土) 11:25:57.59
0==falseはtrue
0===falseはfalse
だから
strposのようにインデックスが0番目にヒットしても0==falseってやるとfalseになってしまう
PHPから緩い比較演算子はなくすべき
0019デフォルトの名無しさん2013/11/16(土) 11:36:01.22
参照代入
これが仕様だと効いた時くそ笑った
http://www.programming-magic.com/20080307090613/
0020デフォルトの名無しさん2013/11/16(土) 11:54:39.89
>>19
そのページの最初のコードを実行すると最新版でも同様になるけど
説明は間違ってるぞ

バグだと未だに思ってる
0021デフォルトの名無しさん2013/11/16(土) 12:05:35.63
なんだこりゃ右辺破壊すんのかよ
ねーよw
0022デフォルトの名無しさん2013/11/16(土) 14:22:05.96
$ref = &$array[1]; //参照渡し

$ref = &$array[1]; //参照渡し
$array[1] = &$array[1]; //参照渡し

としてる感覚なんよね
これ理解させるの大変だから、会社では配列要素のリファレンスをとることを禁止してるよ
0023デフォルトの名無しさん2013/11/16(土) 14:29:47.30
理解できる出来ないじゃなく、右辺値が変化するところが最高にキモい
0024デフォルトの名無しさん2013/11/16(土) 15:39:17.61
>>23
そこ否定する必要がどこに
0025デフォルトの名無しさん2013/11/16(土) 16:42:24.55
>>23
わかるわかる。理屈じゃなくて単にキモいわけだよね。

俺も昔はRubyはキモかった。
でもそれは単に自分の問題であることがわかった。
使っていればなれる。理解すればなれる。
それだけの事だった。

理由がない=自分の力不足
そう考えるようになったよ。
0026デフォルトの名無しさん2013/11/16(土) 16:46:41.08
名前はObjective PHPでいいな?
0027デフォルトの名無しさん2013/11/16(土) 16:49:01.17
>>25
PHP作ったヤツは言語の素人だったから
右辺値や左辺値の知識も無かったのさ
0028デフォルトの名無しさん2013/11/16(土) 16:54:47.02
>>27は言語を作る力はない。
0029デフォルトの名無しさん2013/11/16(土) 17:09:40.70
PHP4の頃、PHPerに聞いたことがあるが、
リファレンスなんて使わないから関係ないと言われた。

今はオブジェクト指向を使えだっけ?
0030デフォルトの名無しさん2013/11/16(土) 17:17:18.63
お前の周りの話だろ。
類は友を呼ぶってな。
0031デフォルトの名無しさん2013/11/16(土) 17:33:26.43
代入しただけで値が変化する画期的システム
副作用を避けようとする風潮と真逆
0032デフォルトの名無しさん2013/11/16(土) 17:42:00.37
>>31
代入しただけでは変わってないよ
0033デフォルトの名無しさん2013/11/17(日) 00:11:08.25
代入して値が変わるなんてありえない言語だな。

var a = 1
0034デフォルトの名無しさん2013/11/17(日) 00:12:44.43
それ右辺変わってないがな
0035デフォルトの名無しさん2013/11/17(日) 00:50:52.64
いや右辺は変化してるだろ
PHPerは参照が何かすら分かってないのかよ
0036デフォルトの名無しさん2013/11/17(日) 04:31:21.23
と言うかPHPにおける参照の概念自体が間違ってるのかも
そのサイト、俺は図を見てもしばらく理解に苦しんだわ
理解したとき、その図には、その前の状態の図が必要だと思った
その前の状態は、×側と同様に変数に値そのものがくっ付いてる状態なんだな
てっきりその前から全てが参照なんだと思ってたら…
0037デフォルトの名無しさん2013/11/17(日) 09:09:16.66
>>34-35
>>33にいってるのかそれ以前に言ってるのかはっきりしろ
0038デフォルトの名無しさん2013/11/17(日) 09:30:19.04
あれ、参照を用いた言語で、右辺に副作用がないものってあまりないんじゃないか?

参照カウンタ増やすだろ。これも一緒だぞ

配列を渡すとき正しい動作をしてないだけ
配列を参照渡しにしとけばバグらなかった話

この例に
$tmp = $array[1];
$tmp = 'Z';
とか足しても、$arrayや$copyには影響ない。

どちらにしろバグを仕様と言い切ってるわ
駄目言語であることには代わりがない
0039デフォルトの名無しさん2013/11/17(日) 09:39:27.13
33は何が言いたいのか意味が分からん。
0040デフォルトの名無しさん2013/11/17(日) 12:34:21.56
わかり易い例にしてやろうか?

$value = 1;

$ref1 =& $value;
$ref1 = 2; ← これで$valueが変わるのは普通

$ref2 = $value;
$ref2 = 3; ← これで$valueが変わるのはおかしい

そうだろ?

だけどこれを配列の1要素にした途端、
最後の行で変わってしまうんだよ。
0041デフォルトの名無しさん2013/11/17(日) 12:36:06.86
>>40
あなたの説明では余計に分からなくなる
0042デフォルトの名無しさん2013/11/17(日) 12:37:11.81
説明下手だなあ
0043デフォルトの名無しさん2013/11/17(日) 12:55:04.77
もう少しわかり易い例を出してやろう。

$array[0] = 1;
$copy = $array;
$copy[0] = 2;
print($array[0]); // 出力 = 1

$arrayは変えずに$copyの値を変えているだけだから当然だな。

$array[0] = 1;
$dummy =& $array; // ←一行増やしただけ
$copy = $array;
$copy[0] = 2;
print($array[0]); // 出力 = 1

増やした一行の$dummyは何も使っていないのだからこれも当然だな。

$array[0] = 1;
$dummy =& $array[0]; // ←配列にしただけ
$copy = $array;
$copy[0] = 2;
print($array[0]); // 出力 = 2

仕様だと強弁した所で、どう見てもこれは明らかにバグだろ?
■ このスレッドは過去ログ倉庫に格納されています