トップページ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

仕様だと強弁した所で、どう見てもこれは明らかにバグだろ?
0044デフォルトの名無しさん2013/11/17(日) 12:55:57.37
>>41-42
PHP厨は馬鹿だと仮定すれば
わからないお前が馬鹿なので
正しい反応だw
0045デフォルトの名無しさん2013/11/17(日) 13:15:45.28
ひと目でわかるPHP

$arr = array(3,4,5);

$ref0 = &$arr[0];
$ref1 = &$arr[1];

$copyA = $arr;
$copy1 = $arr[1];

$copyA[0] = $copyA[0] * 10;
$copy1 = $copy1 * 10;

print_r($arr); // 30, 4, 5
0046452013/11/17(日) 13:22:38.07
コピペ失敗

$arr = array(3,4,5);

$ref0 = &$arr[0];
$ref1 = &$arr[1];

$copy = $arr;
$copy_1_ = $arr[1];

$copy[0] = $copy[0] * 10;
$copy_1_ = $copy_1_ * 10;
$copy[2] = $copy[2] * 10;

print_r($arr); // 30, 4, 5
0047デフォルトの名無しさん2013/11/17(日) 13:24:30.08
>>43
お前ほど説明が下手な人は少ないよな
0048デフォルトの名無しさん2013/11/17(日) 14:12:31.30
array以外は?
0049デフォルトの名無しさん2013/11/17(日) 17:23:06.51
phpはよくプログラマに馬鹿にされるから、プログラミング分からないwebデザイナーの奴らにペチパーと馬鹿にされるのが本当に嫌だ。
0050デフォルトの名無しさん2013/11/17(日) 17:27:01.16
>>38の説明ですべて終わってるのに、お前らなにやってるの?
0051デフォルトの名無しさん2013/11/17(日) 17:38:23.61
>>38さんご苦労さまですw
0052デフォルトの名無しさん2013/11/17(日) 18:01:53.37
言語の仕組み知らないと>>38のいってることがわからないってだけだよ
0053デフォルトの名無しさん2013/11/17(日) 18:29:37.17
実行速度面でpython、rubyがぐんぐん改善されてるし
このまま消えていってくれたらいいのにねぇ
出来ることなら触りたくないし
0054デフォルトの名無しさん2013/11/17(日) 18:59:24.56
PHPも改善されていってるし
まあ無理だろ?
0055デフォルトの名無しさん2013/11/17(日) 19:12:33.01
cuiだと
ruby2>pypy>php5.3以上>python>>>perl>ruby1.8
0056デフォルトの名無しさん2013/11/17(日) 19:14:26.49
PHPはfacebookのおかげの部分が大きい
0057デフォルトの名無しさん2013/11/17(日) 19:16:50.76
wordpressの方が影響大きいだろ。

facebookアプリはまあサンプルが
phpっぽい気がするので
理由としてありかもしれんが、

それよりもWordPressは本体がPHPだから、
そのプラグインもPHPで書くのが自然だし、
デザインを変えようと思った時、
そのテンプレートはPHPだ。
0058デフォルトの名無しさん2013/11/18(月) 00:07:24.33
wordpressはphpの利用人口を増やしたが、phpの改善には何も役立っていない
facebookはいろいろなコードを寄贈することで今のphpの速度がある
5.2と5.3の速度の差は、世にhiphopとして出たfacebookのphpのコンパイラによるものが多い

他の言語でもいえることだけど、ディープにその言語を使う新興の大きい企業が必要で
そこから出るリクエストに答えられる言語の開発側が必要ってことだ
0059デフォルトの名無しさん2013/11/18(月) 00:17:29.68
FacebookはDを採用したんだろ
0060デフォルトの名無しさん2013/11/18(月) 00:34:20.32
>>58
> facebookはいろいろなコードを寄贈することで今のphpの速度がある

facebookはPHPにコードを寄贈してないよ。
0061デフォルトの名無しさん2013/11/18(月) 01:32:26.63
ふーん。FaceBookが何したか知らんけど、5.3で結構速くなったよね
何があったの?
0062デフォルトの名無しさん2013/11/18(月) 02:12:48.47
しらね。でもFacebookは関係ないんだろ。
0063デフォルトの名無しさん2013/11/18(月) 09:23:10.59
ttps://developers.facebook.com/blog/post/2010/02/02/hiphop-for-php--move-fast/
0064デフォルトの名無しさん2013/11/18(月) 09:29:16.10
>>59
バックエンドのC++の置き換えって話だっけ
0065デフォルトの名無しさん2013/11/18(月) 12:40:21.32
>>63
やっぱFacebookは貢献してるんだ
0066デフォルトの名無しさん2013/11/18(月) 18:33:54.40
次の方〜。いらっしゃいませんか〜
0067デフォルトの名無しさん2013/11/19(火) 22:52:39.31
世界はphpで出来ている。
よく見てみろ。お前の周りはphpのコードだらけだ。
0068デフォルトの名無しさん2013/11/19(火) 22:57:25.71
2chはperlです
0069デフォルトの名無しさん2013/11/19(火) 23:11:17.27
悪貨が良貨を駆逐するなんて言葉もあるし

phpが広く使われている事と、言語としての良し悪しとは分けて考えた方がよかろ
だからといってもちろん関連性皆無だと言うつもりもない
cgi駆逐するに足る、十分使える言語であり、便利な環境を提供できたからこそ普及したと思います、はい。
0070デフォルトの名無しさん2013/11/19(火) 23:35:27.90
悪貨が良貨を駆逐する

つまり今俺達が生きているのは
良貨を駆逐した結果なんだよ。
0071デフォルトの名無しさん2013/11/21(木) 13:04:58.88
>>69
cgiって・・・
0072デフォルトの名無しさん2013/11/21(木) 13:18:39.58
>>69
CGIの意味を知らなさそう
0073デフォルトの名無しさん2013/11/21(木) 13:52:05.50
仕組みとしてのCGIがサーバモジュール型サービスの旗手であるPHPに駆逐されたってことだろ
fastCGIが台頭するまでPHPのウリ扱いされてたし
0074デフォルトの名無しさん2013/11/21(木) 13:56:40.89
>>73
当時からPHP使ってたが、その売り文句に苦笑してたわ
0075デフォルトの名無しさん2013/11/21(木) 14:36:30.82
>>73
mod_perlは1996年からあったけど
fastcgiはいつからだ?
0076デフォルトの名無しさん2013/11/21(木) 14:42:52.04
>>75
PerlのFastCGIは1996年だっけな
FastCGI自体はもっと前からあるよ
0077デフォルトの名無しさん2013/11/21(木) 16:06:11.72
phpのブームは96年より後だよな
0078デフォルトの名無しさん2013/11/21(木) 16:11:19.53
>>70
クソマジメに作ったものより、テキトーに作ったものの方が愚民には受け入れられやすい
というのが俺解釈
0079デフォルトの名無しさん2013/11/21(木) 16:27:33.92
素人受けするところはDOSのバッチファイルみたいなものだな
0080デフォルトの名無しさん2013/11/21(木) 21:48:16.05
赤いピルを飲んだプログラマが使う言語>PHP
0081デフォルトの名無しさん2013/11/23(土) 09:40:11.35
?:の結合順序
とか書こうと思って開いたら>>19見てぶっとんだ

参照される側の変数は最初は図の上の$bみたいな形だが参照されると下の形に変わるということ?
0082デフォルトの名無しさん2013/11/23(土) 09:53:43.11
>>81
そんな単純な話ではないよ
配列の要素を参照した場合、その配列のコピーが正常に行われないバグないし仕様

三項演算子の優先順序が他と違ってキモイってあったな
0083デフォルトの名無しさん2013/11/23(土) 10:22:21.78
説明ありがと
よくわからんけどw
発生条件にはやはり配列も絡むのか

関係ないけどPHPの配列って数値添字も含めて全部連想配列なのもキモい
$a[0]=0;
$a[3]=3;
$a[2]=2;
foreach($a as $b){print "$b\n";}

三項演算子はキモいじゃなくマジ不便
0084デフォルトの名無しさん2013/11/23(土) 10:39:52.67
配列を返す関数の返り値から特定の要素だけ取り出すとか
(Perlなら (stat("filename"))[9] )
作ったオブジェクトをいきなり使うとか
( (new A())->method() )
いったん変数に代入しないとできないのは地味に不便
0085デフォルトの名無しさん2013/11/23(土) 10:48:33.64
>>84
後者って前に対応してなかったか?
0086デフォルトの名無しさん2013/11/23(土) 10:50:15.24
>>84
両方とも5.4でできるようになってる
0087デフォルトの名無しさん2013/11/23(土) 10:51:01.61
ああ、会社のサーバのは5.2だわ
0088デフォルトの名無しさん2013/11/23(土) 10:54:10.95
関数内で使った変数のスコープがデフォルトでローカルなのはよいこととして認める
0089デフォルトの名無しさん2013/11/23(土) 11:06:40.82
>>87
5.4以上にすると前に戻れなくなる
その2個以外に
$a = [1, 2, 3, 4];
とか対応してるし
0090デフォルトの名無しさん2013/11/23(土) 11:17:15.94
array(array(1,2,3),array(4,5,6),array(7,8,9))とか長ったらしいもんね
だが対外サービスで使ってる環境を簡単に変えるとかないわ
0091デフォルトの名無しさん2013/11/23(土) 11:18:34.51
>>90
サポートは大丈夫なん?
0092デフォルトの名無しさん2013/11/23(土) 12:46:33.18
問題が見つかっても基本は上のアプリで回避する方向だろな
気づかないところで互換性がなくなるほうがよっぽど怖い
0093デフォルトの名無しさん2013/11/23(土) 13:45:35.63
5.2使えてるってことは、客側の要件が緩々なんだろうな。php4がまだ残ってるっていうぐらいだもんな
うちの5.2はディストリがパッチ当ててくれる環境だったけど、CVEしか対応しないからダメってことになって、客の金で作り直したな
0094デフォルトの名無しさん2013/11/23(土) 23:04:12.85
当時は専用サーバーやシェルを解放してるレンタルサーバーは高額で稀で、phpは廉価なサーバーで高速にウェブアプリを動かせた
デプロイが簡単だったし
movabletypeが没落してwordpressが台頭した理由がまさにそれ
マンモス本が出てphp3を日本語対応してサービスインする国内のレンタルサーバー屋が出始めたのが2000年位から
0095デフォルトの名無しさん2013/11/25(月) 17:50:04.95
多言語がWeb開発で中途半端
PHPには追いつけない
0096デフォルトの名無しさん2013/11/25(月) 21:58:46.32
何をもって中途半端かまで書かなきゃそんな呟きは放屁と変わらんぞ
0097デフォルトの名無しさん2013/11/26(火) 15:24:40.46
追いつけないワロタ
せめて他の言語齧ってもう一度同じ台詞はいてみろよw
0098デフォルトの名無しさん2013/11/26(火) 15:41:44.01
ちょっとの手間で素人が「使えた気になる」
それが長所でもあるけど
ブラウザでしか検証してこなかったコーダなんかがプログラマ気取りになっちゃって
サーバのことなんてこれっぽっちも考えない
0099デフォルトの名無しさん2013/12/01(日) 02:56:47.35
鯖屋とコーダーの中間に位置するWeb屋
0100デフォルトの名無しさん2013/12/01(日) 06:14:32.32
鯖屋とコーダーの両方ができるWeb屋
0101デフォルトの名無しさん2013/12/01(日) 21:26:38.60
最近、PHP触ってるけど$thisがめんどくさい
0102デフォルトの名無しさん2013/12/08(日) 10:59:10.72
インスタンスのメソッドから呼び出したstaticメソッドの中で$thisが使えて呼び出し元のインスタンスを示すお馬鹿
■ このスレッドは過去ログ倉庫に格納されています