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

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

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

他の言語と比較しながら、具体的にちゃんと説明してください!
0449デフォルトの名無しさん2014/02/08(土) 05:04:08.08
やってて気づいたけどインスタンスからアローでクラスメソッド呼べるじゃん
これは知らんかったわ

class A {
static function f() {}
}

$obj = new A;
$obj->f(); // A::f()と同じ
0450デフォルトの名無しさん2014/02/08(土) 08:46:05.22
>>449
deprecated
0451デフォルトの名無しさん2014/02/08(土) 08:54:10.67
>>448
5.5.3だとならんよ
0452デフォルトの名無しさん2014/02/08(土) 10:25:56.27
PHPは万事緩いんだよな
変なふうに書いてもとりあえず動く
それが良いケースもあるが
0453デフォルトの名無しさん2014/02/08(土) 13:04:07.53
何を勘違いしているのかしらんけど、
PHPのstaticメソッドというのは、
C++のstaticメソッドに似せて作られているものだから。
0454デフォルトの名無しさん2014/02/08(土) 13:07:06.84
>>449
Perlでも同じだよ。

クラス=パッケージだから
インスタンスからでもクラスメソッドが呼べる。

正確にはどちらでも呼べるが
アローを使った場合とそうでない場合で
メソッド側で(thisに相当する)$selfが違ってくる
0455デフォルトの名無しさん2014/02/08(土) 13:50:27.49
>>453
なんのことを言ってるのかね?
0456デフォルトの名無しさん2014/02/08(土) 14:08:02.39
Perlにはスタティックメソッドって言語機能がない
クラスメソッドとして使うことを想定されてるメソッドもあるというだけで
0457デフォルトの名無しさん2014/02/08(土) 14:11:30.56
そもそも、パッケージをクラス代わりに、
そのパッケージとblessしたリファレンスを
インスタンス代わりにしてるだけだしなあ
0458デフォルトの名無しさん2014/02/09(日) 18:11:14.41
>>622
PHPだとarray_mapのコールバックにnullを渡せばzipになるから簡単
0459デフォルトの名無しさん2014/02/10(月) 09:40:40.04
PHPのstrposが全然覚えられません・・。
俺はプログラマーになれません。
0460デフォルトの名無しさん2014/02/10(月) 09:59:43.78
毎回リファレンス見ればよろし
関数名覚えてても引数の順番いつも忘れる俺
0461デフォルトの名無しさん2014/02/10(月) 10:10:29.97
何かをやる時にselfやthisを使わないで
すべて「引数」と「戻り値」でやるっていう旧世代のやり方だから
0462デフォルトの名無しさん2014/02/10(月) 10:32:53.18
しっかしWordPressが進化しまくってPHPを1から書くことなんて無くなってね?
まだObjective-CやC♯真面目にやってたほうがまし
0463デフォルトの名無しさん2014/02/10(月) 11:05:44.94
Objective-CやC♯も
1から書くことなんて無いだろ?

お前は1から書きたいのか?
無駄な努力だよ。
0464デフォルトの名無しさん2014/02/10(月) 11:33:52.82
>>462,463
ゴミだろ

それって1の場所が変わっただけで
周りがみんなその場所から始めるならそこが1だよ
0465デフォルトの名無しさん2014/02/10(月) 11:35:54.32
>>464
何言ってるかいみわからんwww

それにしてもまあ、一から書かなくていいメリットを
ディスるバカが居るなんてなぁw

俺は一から書くしかない言語が優れてると思ってるんだ!
ですか?www
0466デフォルトの名無しさん2014/02/10(月) 12:46:19.16
ライブラリやフレームワークの意味が分かってない馬鹿が一人
0467デフォルトの名無しさん2014/02/10(月) 13:07:50.63
なんで、haskellでwebアプリって作られないんだろ
金になりそうなのに
0468デフォルトの名無しさん2014/02/10(月) 13:14:16.23
手間すぎるから
0469デフォルトの名無しさん2014/02/10(月) 13:33:26.46
もうウェブサイトを一から作るって案件は減ってるのは確か
ウェブじゃなくて、モバイルのネイティブアプリで展開するケースが増えてる
ウェブもよほど凝ったサイト以外はWordPressで作った方が早い
0470デフォルトの名無しさん2014/02/10(月) 14:21:55.33
>>469
なんかもう最近はCSS(というかCompass)書くのが一番だるい
HTMLもPHPも書かん
PHP書くのはCakeくらい
0471デフォルトの名無しさん2014/02/10(月) 15:46:02.07
webアプリの案件も減っているの?
0472デフォルトの名無しさん2014/02/10(月) 15:53:47.71
フリーでオープンを謳ってたヤツらの間で、ファイナンスが熱くなったらいいな
0473デフォルトの名無しさん2014/02/10(月) 16:40:03.86
>>471
最近ほっとんどJSだと思うけど
0474デフォルトの名無しさん2014/02/10(月) 20:05:39.43
>>470
え?まさかsass使ってないの?
0475デフォルトの名無しさん2014/02/10(月) 20:23:35.31
>>474
Compassって書いてあるよ
0476デフォルトの名無しさん2014/02/10(月) 20:43:26.97
Compassはライブラリであって
書くものじゃないんだが?
0477デフォルトの名無しさん2014/02/10(月) 21:48:31.49
>>476
いるよねーこういう屁理屈いう奴
0478デフォルトの名無しさん2014/02/10(月) 22:10:01.06
事実言ってるのに、屁理屈というやつなんなんだろ?
0479デフォルトの名無しさん2014/02/10(月) 22:41:14.52
>>622に期待
0480デフォルトの名無しさん2014/02/10(月) 22:59:21.71
>>622
期待と言っておきながら、>>479自身でレスするのかよw
0481デフォルトの名無しさん2014/02/11(火) 06:51:31.09
低能ちゃんは突っかかるからなぁ
0482デフォルトの名無しさん2014/02/11(火) 09:07:04.49
まともに働いてるやつはこんなスレ見にこないからなw
0483デフォルトの名無しさん2014/02/11(火) 10:51:45.31
貧乏暇無しってヤツだね!
0484デフォルトの名無しさん2014/02/11(火) 10:55:48.89
2ちゃんねるやってるから暇なし
0485デフォルトの名無しさん2014/02/11(火) 12:14:42.73
怒らないでマジレスしてほしいんだけど
なんでこんな時間に書き込みできるわけ?
普通の人なら学校や会社があるはずなんだけど
このこと知った親は悲しむぞ?
現実見ようぜ
0486デフォルトの名無しさん2014/02/11(火) 12:52:17.01
マジレスすると
http://netyougo.com/wara/10154.html

「怒らないでマジレスしてほしいんだけど」とは、2chにおける有名なコピペである。
以下の様な書き込み。

怒らないでマジレスしてほしいんだけど
なんでこんな時間に書き込みできるわけ?
普通の人なら学校や会社があるはずなんだけど
このこと知った親は悲しむぞ?
現実見ようぜ
こんな時間に書き込んでいる人物について批判をしているが、この書き込みを行っているユーザーも同様ということに気がついていない、というもの。
0487デフォルトの名無しさん2014/02/11(火) 13:52:31.09
>>486
なんだこのゴミ氏ねゴミ
0488デフォルトの名無しさん2014/02/11(火) 15:09:49.18
>>486
気持ち悪
0489デフォルトの名無しさん2014/02/11(火) 15:18:42.23
>>486
ジャ・・ジャ・・ジャ・・ジャアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアアwwwwwwwwwwwwwwwwwww
0490デフォルトの名無しさん2014/02/11(火) 16:38:05.14
つーか今日祝日ってことも知らねーニートなの?
0491デフォルトの名無しさん2014/02/11(火) 16:39:13.14
ニートだから祝日を知らないか、社会人だから祝日を知らないか、それが問題だ
0492デフォルトの名無しさん2014/02/11(火) 16:40:32.40
>>478
死ねよコミュ障
0493デフォルトの名無しさん2014/02/11(火) 16:59:03.85
c++やPythonよりHaskellの方が書く効率良さそうだよね
c++でポリモーフィズムやテンプレート使うと継承や仮想関数について理解する必要できるけど、
組込開発やUnix方面では殆どcで書くしかないから、cの作法について熟知してる方がマシだし
Pythonだと毎度ながら変数への代入を間違えて、つまらないデバッグに時間を取られてしまう
PHPの場合、Haskellが型チェックすることで効率が良くなるようなコードなんて書きそうにない
仕事でcとPHPを軸にして趣味でHaskell製アプリを書くと、とても幸せになれそう
0494デフォルトの名無しさん2014/02/11(火) 17:17:16.02
>>493
うん、理屈ではそうなんだけど、
実際やってみると、開発時間的には大差ないよ。
0495デフォルトの名無しさん2014/02/11(火) 17:26:57.57
>>494
嘘つけ
0496デフォルトの名無しさん2014/02/11(火) 17:32:00.66
>>495
開発時間が半分になる言語があったら
開発費用も半分になるんだ。

開発時間も開発費用も半分でいいですから
○○言語でやらせてください!

といえるかい?
0497デフォルトの名無しさん2014/02/11(火) 17:35:19.03
>>496
その例えって、すごくバカで、開発者側からしか見てないよね?
競合がc++で書いて2倍の工数を掛けるなら、短納期で安い方に顧客が移るだろ
0498デフォルトの名無しさん2014/02/11(火) 17:36:24.97
Haskell開発者は、CやPHPの開発者と単価同じで仕事してくれるの?
0499デフォルトの名無しさん2014/02/11(火) 17:37:13.87
そもそも趣味だっつんだから論点ずれてねーか?
0500デフォルトの名無しさん2014/02/11(火) 17:37:57.27
○○言語で書くから2倍の工数と賃金を下さいって、すごく間抜けな発言
0501デフォルトの名無しさん2014/02/11(火) 17:38:24.15
>>497
> 短納期で安い方に顧客が移るだろ
それがPHPだったりするんですよね。
0502デフォルトの名無しさん2014/02/11(火) 17:38:57.38
>>498
裁量労働か無料で仕事するんじゃないか?
0503デフォルトの名無しさん2014/02/11(火) 17:40:42.91
競合がPHPで書いているとすると、それに対抗するなら
短い時間、安い金額で仕事をしないといけないわけで。
0504デフォルトの名無しさん2014/02/11(火) 17:46:56.61
タダのWebアプリ、Webサイト作りならね
パーサー書いたりコード解析などの将来性まで含めたら、
どちらが費用対効果高いか分かるでしょ
0505デフォルトの名無しさん2014/02/11(火) 17:47:26.27
一番重要なのは、ちょっとぐぐれば大抵のことはわかる言語かどうか

Yes な言語なら開発者はヘボでもいい
No な言語ならプロジェクト内で発生する課題一つ一つを自力で解決できるレベルの開発者が必要になる
この差はでかい
0506デフォルトの名無しさん2014/02/11(火) 17:50:04.03
>>504
将来のことは分からないから無駄な投機はしない
ってかぶっちゃけパーサとかコード解析とかならHaskellよりOcamlの方が使いやすい
その程度の用途にHaskellはぶっ飛びすぎ
0507デフォルトの名無しさん2014/02/11(火) 17:50:09.81
DelphiやVBより、Haskellの方が優れた選択肢になるじゃないか
0508デフォルトの名無しさん2014/02/11(火) 17:53:30.08
>>506
Ocamlって、パッと見たときに型が分からないんだけど
これって、Objectが状態遷移を表現してるの?
0509デフォルトの名無しさん2014/02/11(火) 18:16:17.51
はじめてのc、すごいH、パーフェクト3P
0510デフォルトの名無しさん2014/02/11(火) 18:49:00.74
PHPゴリゴリ書いていたらいいんだよ
0511デフォルトの名無しさん2014/02/11(火) 19:45:48.68
>>510
WEB のサーバー側しか書けないじゃん >PHP

# 組み込み門は無理
# バックエンドの計算主体系は無理
# 遅いし
# コンパイラ屑だし
0512デフォルトの名無しさん2014/02/11(火) 20:32:47.71
PHPだと後からいくらでも不具合出るから保守費用でどっさり追加できるもんね
0513デフォルトの名無しさん2014/02/11(火) 21:49:37.00
>>511
なんかもうc++でいーじゃん
0514デフォルトの名無しさん2014/02/11(火) 21:59:36.37
>>508
型推論で記述が省略されているか、.mliファイルに記述されている
0515デフォルトの名無しさん2014/02/11(火) 23:08:28.49
PHPが駄目なのはわかるけど何の言語と比較して駄目なのか
同じ駄目さが他の多くの言語にもあるし、PHPがずば抜けて糞とは言えない

PHPユーザーにプログラミング初心者が多すぎて糞コードが量産されているから悪いイメージがあるだけだと思う

OOP十分理解していれば他のLL(特にruby,js,perl)より相当読みやすいコード書けるよ
0516デフォルトの名無しさん2014/02/11(火) 23:42:59.53
C#もよく出来た言語の割に初心者コード量産してるよ。Unity関係でとち狂った説明してるサイトも良くぐぐった先で到達してもやもやする。「なんかstaticって付けたらすげー便利になった」みたいなレベルの解説ブログとか。

言語が良くできてるかどうかじゃないと思うよ
obj-cなんか起源からして建て増し住宅の末路な糞設計のくせしてちゃんと回ってるからな
ARCとかblocks拡張とか魔改造で振り回しくさって酷いもんだよ。Appleの改変の歴史知らずに古いコードをコピペしても、もはや謎のエラーしか出ない
一方、文法などが美しいのではと聞かれたら、八割がたの経験者が鼻で笑うだろう
あの変態さがクセになってる奴もいるのだけど。c/c++とsmalltalk同居させてARCの罠を掻い潜ってトールフリーな連携できたときの達成感といったらもうそれこそ黒魔術うっひょーだよほんと

脱線した
要するに、phpは世間がいうほど悪くない程度の糞
0517デフォルトの名無しさん2014/02/11(火) 23:49:11.18
C#みたいなタイプセーフでブロックスコープな言語はどんなにメチャクチャに書こうとコンパイルが通る以上、最低限のクオリティは保証される
他人のコードをリファクタリングするのも容易
スクリプト言語とは決定的な差がある
0518デフォルトの名無しさん2014/02/12(水) 00:00:21.55
最初から綺麗にコードを書けばいいだけの話。
じっくりと設計に時間をかけて、拡張性を持たせて、
仕様変更もないようにすれば
リファクタリングが必要になることはない。
0519デフォルトの名無しさん2014/02/12(水) 00:09:24.18
無理だね
0520デフォルトの名無しさん2014/02/12(水) 00:29:15.97
>>515
OOPに関してPHPが読みやすいということはないっしょ。そもそもPHPって満足にOOPできないし。OOPの機能は充実してるけど、基本的な値に対してOOPを使えないのが致命的。
str.lengthと書きたいのに、strlen($str)と書かないといけないし。(マルチバイト考慮するならmb_strlen($str)になるのがさらに糞)

OOPを理解していることで他のLLより読みやすいコード理屈はない。(良いプログラマが書くなら対してかわらん)
PHPの場合読みやすさ云々より、くそプログラマを呼び寄せやすいという体質が一番の問題。しかもそれはイメージではなく本当のこと。
0521デフォルトの名無しさん2014/02/12(水) 00:36:52.45
>>516
Obj-CのARCとBlocksを引き合いに出すのはちがうとおもうぞ。
両方共必要だから追加された仕様なわけで。ARCはiOS用に、BlocksはGCDのために。(そもそもBlocksはObj-Cではなく、Cのコンパイラ仕様)

対してPHPの場合、例えばトレイトなんてなんのために追加されたのかわからない。
クラスさえ満足に扱えていないし、そもそもinterfaceがあるのにトレイトとか取って付けた感しかない。

>要するに、phpは世間がいうほど悪くない程度の糞
これは同意。ただ、ただクソプログラマの傍若無人さを助長してしまうのは何とかしてほしい。
0522デフォルトの名無しさん2014/02/12(水) 00:50:51.83
逆じゃないかな
なんでPHPはインターフェイスや抽象クラス導入したんだろう
PerlやPythonやRubyは多重継承やミックスインが以前から出来た
スクリプト言語のくくりで言えば、もっと早くトレイトは導入すべきで、インターフェイスはなくても良かった
0523デフォルトの名無しさん2014/02/12(水) 01:02:02.08
トレンド真似る順番間違えた、ってことじゃないの
5系初期はとりあえずJava真似ときました感があるし
0524デフォルトの名無しさん2014/02/12(水) 01:11:46.35
>>520
rubyのObjectクラスみたいに元々あるクラスの設計が酷すぎて、それに依存するもの全てがキモくなるとかがあるからラッパー書いた方がまだ綺麗と思った
0525デフォルトの名無しさん2014/02/12(水) 01:14:52.91
多重継承とミックスインなら、継承とインターフェースとトレイトの方が好き
前者はis aがすぐ崩れる
0526デフォルトの名無しさん2014/02/12(水) 01:22:22.47
phpの大量の小汚い謎関数ゴリ押しも、ラッパー書けば足りることではあるな
まるっと非推奨にしてくれたら見た目の印象も綺麗になるのかな

でもexplodeって関数名なんかはある意味発明だと思うw
0527デフォルトの名無しさん2014/02/12(水) 01:56:13.97
>>524
RubyのObjectがどう酷いのかよくわからんが、ラッパーだって設計が変われば新しいラッパーができて、じゃあどっち使えばいいんだよ!古い方の使ってたコードはそのまま放置?ってなるからたいして変わらないと思うけど。
0528デフォルトの名無しさん2014/02/12(水) 02:02:10.43
>>521
> 例えばトレイトなんてなんのために追加されたのかわからない。
> クラスさえ満足に扱えていないし、

君のレベルはまだまだ低い。がんばろう。
0529デフォルトの名無しさん2014/02/12(水) 02:22:42.48
いい感じの議論が起こってるなw
とりあえず現時点で一番糞なのは話題にものぼらなくなったPerlだと思う

なんだあいつ
0530デフォルトの名無しさん2014/02/12(水) 02:24:21.77
なんだあいつってお前が荒らしてるんだろw
0531デフォルトの名無しさん2014/02/12(水) 02:28:55.87
Perlの最新事情なんも知らないなー。随分世話になったのに
「学生時代にアイドルだったxxxちゃんって今どうしてるのかな……いや、別にどうでもいいけど」的な位置づけ
mixiで現役だっけ?
0532デフォルトの名無しさん2014/02/12(水) 02:54:07.94
>>528
何のために追加されたかわからないという言い方は不適切だったな。
利点は分かるが、一度JavaのようなOOPスタイルにしたのに、トレイトを追加とか節操がないなと思った。
他の言語はもっと慎重だからさ。

特にPHPの開発者はついて行けないと思うんだよな。クラスも満足にってのはそういう意味ね
0533デフォルトの名無しさん2014/02/12(水) 03:28:32.44
traitは一部でコードテストを後付けするのに使っとるくらいだわ
オブジェクトとしてクラス定義を操作できるようになるまでは、わざわざ使わないかなー
0534デフォルトの名無しさん2014/02/12(水) 03:59:57.07
>>532
いや、お前がトレイトわかってないだけだよ。
トレイトと継承やインターフェースは全く別の概念。

ダイアログを継承して、ボタン付きダイアログを作るだろ?
この時、ボタン付きダイアログは、ダイアログの多く機能をそのまま備えており
ダイアログに+αしたもの。これが継承。

インターフェースというのはあるクラスが、どんなクラスとして使えるかって定めたもの
めちゃくちゃな例だが、ボタン付きダイアログにシューティングゲームの自機戦闘機インターフェースを
持たせれば、ボタン付きダイアログを自機戦闘機としても使える。
外部から見た時にあるクラスがどんな性質を持っているか、という時にインターフェースを使う。

そしてトレイトはたとえるならば装備だ。レーザーとかミサイルとかな。
自機戦闘機にレーザーを装備できる。だが自機戦闘機はレーザーを継承しているわけじゃないし
レーザーインターフェースを持ったわけじゃない。(別に外部からインターフェースを知りたいわけじゃない)

単に、自機戦闘機がレーザーを使いたいからそれを装備した。
これは継承ともインターフェースとも違う。
0535デフォルトの名無しさん2014/02/12(水) 04:31:48.97
>>534
それは知ってる。
でもそれを理解して使い分けられる人は少ないよ。
PHPのトレイトは本来の意味を忠実に実装してる分、返って理解されにくいと思う。あと、型とトレイトが分かれてるのもかったるいし、説明しにくい。
それよりはinterfaceが実装を持てるぐらいの方が良かったなと思う。(Java8はこれを選んだけど)
0536デフォルトの名無しさん2014/02/12(水) 05:08:02.37
いや、お前がトイレわかってないだけだよ。
トイレと便座や便器は全く別の概念。

トイレットペーパーを継承して、香り付きトイレットペーパーを作るだろ?
この時、香り付きトイレットペーパーは、トイレットペーパーの多く機能をそのまま備えており
トイレットペーパー+αしたもの。これが継承。
0537デフォルトの名無しさん2014/02/12(水) 05:23:57.50
>>534
その説明だと、トレイトってよりは、コンポジットだな。
鳥(親クラス)にトレイト(飛べる)つけて、スズメ(具象クラス)とかみたいな例がいいかと。
さらに言うと、合成についても説明がいるが、端折ったのか?
0538デフォルトの名無しさん2014/02/12(水) 05:26:28.69
朝の4時5時から詳細な説明を要求する人って・・・
0539デフォルトの名無しさん2014/02/12(水) 05:40:12.85
トレイトと型(インターフェイス)が分かれているのって一見綺麗だけど、トレイトを型安全に書くには両方必要になって面倒(名前どうすればいいだろ…)

割り切って、トレイトオンリーってなら、Rubyのようにダックタイピングにするか、Scalaのように型としての機能も持たせればよかった。
だから、実用性がなんか微妙なんだよな。ある意味PHPらしくない

結局、インターフェイス入れたのが間違いな気がする。タイプヒントとか使ってるのあまり見たことないし
0540デフォルトの名無しさん2014/02/12(水) 06:54:00.18
>>520
現場的に言えば、そういうのはコードの読みやすさと関係ないのでどっちでもいい
str.length と書いても strlen($str) と書いてもどちらでも理解できる
そういうところに拘るのは宗教
0541デフォルトの名無しさん2014/02/12(水) 07:11:42.14
>>540
「oop理解してたら他のLLよりphpが読みやすい」とか言うから、文字列すらオブジェクトじゃないのに関係ないだろ、と返しただけで、メソッドと関数どっちが読みやすいなんて論じてないよ。

ま 、strlen他文字列関数には読みやすさ以外にダメな点たくさんあるけどね。
0542デフォルトの名無しさん2014/02/12(水) 07:20:19.38
>>541
ああ、なるほど。
Perl, PHP, Python, Ruby の中だと OOP を意識した設計がなされているのは Ruby だけで他 3 言語はどっこいどっこい
という主張なら同意する
0543デフォルトの名無しさん2014/02/12(水) 07:43:14.16
>>541
文字列だけに限らず、OOPの機能が一切存在しないといえなければ、関係ないとはいえないが…
0544デフォルトの名無しさん2014/02/12(水) 07:53:21.91
perlとやubyをヘビーに使ってる人は読み易さの基準が一般人と違う印象があるな
彼らが読み易いと言うコードは読み難い
0545デフォルトの名無しさん2014/02/12(水) 07:55:21.20
それは今だに闇属性が抜けきれてないPerlerやRubyist
0546デフォルトの名無しさん2014/02/12(水) 07:57:05.33
>>544
一般人はソースコードなんて読めないんだが?
それが技術ってもんだろう?

どっちが読みやすいかは両方知っている人でないと
判断できない。

片方しか知らない人がいう「読みにくい」は
まさに一般人がソースコードを読めないのと同じこと。

技術力がついてから読みやすいかどうかの話題に参加してね。
0547デフォルトの名無しさん2014/02/12(水) 07:57:57.81
噂をすれば闇プログラマ
0548デフォルトの名無しさん2014/02/12(水) 08:00:25.40
反論できない、悔しい。
そうだ悪口を言おう、
お前は闇プログラマ。(よし勝った!) ←馬鹿じゃね?w
■ このスレッドは過去ログ倉庫に格納されています