【PHP】下らねぇ質問はID出して書き込みやがれ 128at PHP
【PHP】下らねぇ質問はID出して書き込みやがれ 128 - 暇つぶし2ch91:nobodyさん
13/05/31 10:55:23.57
>>88
言い回しはともかく、IDを表示するのがルールなんだから答える必要はないと思うよ。
君の言動?も相当人を不愉快にさせてると思うけどね。

92:76
13/05/31 11:53:17.47 2B6R5nZc
話の流れで疑問が出たときもID必要なのね。

>>81
> オートロードでダメな理由って何なの?

一発でパスを確定できるファイル名でPHPファイルを置いているなら問題ないけど、
ロード候補ディレクトリが複数になる場合は、ファイルの存在チェックが必要になる。
そのオーバーヘッド分が馬鹿にならないんじゃないかと思った。

SPRに準拠したnamespaceを定義していて、きれいにPHPファイルを配置してるなら
問題ないけど。

93:76
13/05/31 17:18:33.14
時間ができたのでちょっとだけ実験してみた。

一つのクラスをnewするだけのコードを、"ab -c 32 -n 10000"でrequire_onceとautoloadを比較。
PHP 5.4.10。APC有効。開発用Macで実行。

require_once版:
Requests per second: 8452.75 [#/sec] (mean)
Time per request: 3.786 [ms] (mean)
Time per request: 0.118 [ms] (mean, across all concurrent requests)

autoload版:
Requests per second: 6625.91 [#/sec] (mean)
Time per request: 4.830 [ms] (mean)
Time per request: 0.151 [ms] (mean, across all concurrent requests)

autoloadの方が20%程度くらい遅いけど、そこそこぬるい環境だったら問題ないのかな。

94:nobodyさん
13/05/31 17:31:36.61
自分でできるんなら、最初から自分でやれアホ

95:nobodyさん
13/05/31 17:43:27.30
必要なファイルの数 = N1
無駄なファイルの数 = N2

ファイルロードのコスト = L
オートローダによる1ファイルあたりのオーバーヘッド = A
(オートローダのファイルロードコスト = L+A)

とした場合のファイルロード全体のコスト C

通常のファイルロードコスト C1
C1 = (N1+N2) * L

オートローダ使用時のコスト C2
C2 = N1 * (L+A)

オートローダ使用時の差分 C2-C1
N1*A - N2*L

96:nobodyさん
13/05/31 17:44:32.16
現状のフレームワークでプラグイン多用した構成の場合は
ファイルの存在チェックのほうがはるかにコストが低い場合が多いと思うけどな。
素で書き起こした機能限定のシステムじゃなければオートローダ使わない手はないと思うけど。

97:76
13/05/31 17:56:07.06
>>95
うーん、そもそもその「無駄なファイルの数」というのが何なのかわからないんだ。どういうこと?
ひょっとして、ロードする必要が無いファイルもrequireしてるってこと?

98:76
13/05/31 18:04:22.71
あ、こういうことか。
Foo.php:
<?php
class Foo {
public function hoge() { $o = new Bar(); }
public function fuga() { $o = new Baz(); }

Bar.php:
<?php
class Bar {}

Baz.php:
<?php
class Baz {}

index.php:
<?php
require_once 'Foo.php';
require_once 'Bar.php';
require_once 'Baz.php';

$o = new Foo();
$o->hoge();

としたとき、Baz.phpのロードがいらないってことか。

99:95
13/05/31 18:04:47.74
え、だからオートローダが有利な場面があるんじゃないの?
おかしい?

100:76
13/05/31 18:09:16.63 2B6R5nZc
ところで、>>98のような場合、autoloadを使わないとき、requireはどうやるのがいいのかな。

ケース1:Fooを使う人は内部のことなんかしったこっちゃないからFoo.phpでrequireしろ派
Foo.php:
<?php
require_once 'Bar.php';
require_once 'Baz.php';

ケース2:呼び出し側でやる派
index.php:
<?php
require_once 'Foo.php';
require_once 'Bar.php';

俺の場合は、最初はケース1派だったんだけど、理由は忘れたがケース2派になり、今はautoload派になった。

101:nobodyさん
13/05/31 18:13:00.31 2B6R5nZc
ケース1しかありえない

102:nobodyさん
13/05/31 18:13:21.01 2B6R5nZc
途中で送った。
ケース1しかありえない気がしてきた。

103:nobodyさん
13/05/31 18:25:19.05
正しい作法としてはケース1でしょ。
とはいえ、ファイル間の結合度や依存度によってケースバイケース。
たとえばフレームワークのルーティンにおいて bootstrap で基本ファイルを呼び出すっていうのはお決まりのパタン。

104:nobodyさん
13/05/31 18:27:37.83
autoloadが解決する問題は、複雑な依存性が存在した場合のrequire/includeであって、速度に関しては
副次的な物だと思う。

確かに、autoloadはnewのエラーをフックしてファイルをロードするので、無駄なロードは発生しない。

しかし、数千req/secもあるようなシビアな場合ではないのであれば、autoloadあるいはrequire/includeが
一度に付きms未満の差しかないのだから、速度に関してはあまり気にする必要は無い。

クラス名やファイル名、ファイルの配置については、PSR-0に従うのが現状ではベストでは無いかと思う。
そうすれば、autoloadにも対応しやすい。

105:nobodyさん
13/05/31 18:28:37.70
あと、include_once や require_once は結構コストかかるから出来たら使わないほうがいいんだって
ラードフさんが仰ってたよ

106:nobodyさん
13/05/31 18:29:30.28
includeの方がいいのか

107:nobodyさん
13/05/31 20:25:05.53
>>92
SPRってよくしらないんだけど、これ?
URLリンク(github.com)

108:nobodyさん
13/05/31 20:28:46.16
あ、PSRか、ゴメヌ

109:nobodyさん
13/05/31 20:47:34.66
>>92
きれいにPHPファイルを配置してautoload使いましょう、
で終了じゃないか

110:nobodyさん
13/05/31 21:08:07.40 0pyQKPZl
>>83
>>84
お礼遅れて申し訳ない
ありがとうございます

111:nobodyさん
13/05/31 22:00:54.96
最近phpでCLI処理を書いています
今までrubyやpythonを使ったりしてましたが、
PHPは実に使いやすい
いちいち何をincludeして~とか調べなくてもいいし、オブジェクト指向的にも問題ない
web以外にもPHP使うの最高じゃないですか?
なんでCLIではいまいち不人気なんでしょうか
みんなかっこつけてるんですか?

112:nobodyさん
13/05/31 22:08:35.93
便利だから使ってるし、みんな使ってるんじゃない?

113:nobodyさん
13/05/31 22:38:24.89 TNUtMHtE
エラーハンドラで受け取ったファイル名や行数から、その部分のソースコードを取得したいのですが、
それにはファイルを読み直さないといけないですか?
ソースコード自体はメモリに載っているはずなので、
ファイルを読まなくても取得する方法があるような気もするのですが…

114:nobodyさん
13/05/31 23:14:39.26
>>111
LinuxではPerlやPythonはデフォルトで使えることがほとんどだが、PHPはそうじゃないからじゃないかな。
あと、複数のバージョンを簡単に切り替える仕組みがない。
それに、CLIなのに/etc/php.iniを見に行くのがいけてない。
スレッドが使えないとか。
サーバアプリが書きにくいとか。
コマンドラインで使うときのライブラリが充実してないとか。

DB読むツール書くのは楽なんだけどね。

115:nobodyさん
13/05/31 23:57:29.92
>>114
-c オプションで好きなphp.ini見に行けるでしょ?

116:nobodyさん
13/06/01 00:04:17.77
>>115
shebangで/usr/bin/env使いたいときとか、cronと相性悪い。

117:nobodyさん
13/06/01 00:07:19.59
#!/usr/bin/env php
とかできるんだ。知らんかったわ。

118:nobodyさん
13/06/01 00:12:44.55
つか、もともとコマンドラインツール出身のperl, python, rubyと、それほどCLIに力を入れてないPHPじゃ
どっちが使いやすいか明白じゃん。
まあpharがもっと流行れば、もう少しはCLIにも脚光が当たるかもだけど。

119:nobodyさん
13/06/01 00:14:15.52
>>113
PHP自体はCで書かれてるので自由にカスタマイズすれ

120:nobodyさん
13/06/01 00:18:32.89
発想を変えて、独自エラーハンドラ定義して、エディタのtag jump に対応した形式でエラー出力して、
エディタでtag jumpするのはどうかな。

121:nobodyさん
13/06/01 00:27:44.17
PHPは元々の名前の由来自体が Personal Home Page Tools だからね。
それに最初は Perl で書かれてたんでしょ? PHP自体

122:nobodyさん
13/06/01 01:39:45.11
>>121
>それに最初は Perl で書かれてたんでしょ? PHP自体
初耳だけど。ソースは?

123:nobodyさん
13/06/01 01:47:06.51
ソースも何も、超有名な話だと思うがw

ラードフさんが、サイトの作成の際に perl だと余りにも面倒くさかったんで
自分のツールとして perl でライブラリを作ったのが最初だよ

124:nobodyさん
13/06/01 01:55:52.66
>>123
だから、そのことが書いてあるWebページplz

125:nobodyさん
13/06/01 03:22:53.18
>>124
URLリンク(manual.xwd.jp)

126:nobodyさん
13/06/01 03:28:32.98
>>125
URLリンク(php.net)

127:nobodyさん
13/06/01 03:34:45.32
>>126
最近のManualのHistoryでは、最初にPerlで記述したことは省かれてるけど(経緯はわからないけど)、少なくとも2006年までは「Perlスクリプトの単純な組み合わせでした」とされてるわけね。
何をムキになってるの?

128:nobodyさん
13/06/01 03:42:12.25
>>127
ムキになっているのは君でしょ

129:nobodyさん
13/06/01 04:24:03.89
あほ?
>>122 >>124 >>126 >>128
どうみてもおまえがむきになってるだろ(笑)

130:nobodyさん
13/06/01 09:25:46.27
>>129
つ鏡

131:nobodyさん
13/06/01 10:59:27.62
>>124
昔はいたるところで目にしたような気がしたんだが、たしかに今はあまり見かけないな

今確認できたのは Wikipedia の PHPの項目の歴史のセクションにちょこっと書いてある程度だし、
しかもPHPと名付けられた時点では既に C で書きなおされているとされている。

そもそもが曲解していたのかもしれないし、もはや perl との関係はなかったことにする流れなのかもしれないな。

132:nobodyさん
13/06/01 15:32:17.20 Lm5yShvx
抽象クラスのstaticメソッドの中から子の具象クラスのクラス名を知るにはどうすればいいですか?

133:nobodyさん
13/06/01 15:33:43.56
>>121
ださい名前だなぁw
パーソナルて

134:nobodyさん
13/06/01 17:04:54.97
>>133
作者個人専用ツールだったんだからパーソナルで間違いない。

135:nobodyさん
13/06/01 18:36:03.21
>>133
だったらCだってダサいだろ?
はじめてのC
(笑)

136:nobodyさん
13/06/01 18:38:20.52
C language って見た時、Body language を思い浮かべた俺はヘンタイ?

137:nobodyさん
13/06/01 18:45:11.97
>>132
意味が分からん。まさか、

class Parent {
static function hoge(){
// ここで Sub についてなにか知りたい
}
}

class Sub extends Parent {
}

ってことか?

138:nobodyさん
13/06/01 22:59:01.16
>>132
言いたいことがよくわからんが、できないと思うよ。
具体例をコードで示すのが吉。

139:nobodyさん
13/06/01 23:22:14.26
>>132
abstract class AbstractClass
{
 public static function getName() {
  echo static::thisName();
 }
}
class concrete extends AbstractClass
{
 public static function thisName(){
  return __CLASS__;
 }
}
$foo = new concrete();
$foo->getName();

140:nobodyさん
13/06/02 14:29:22.81 ZugnqmP2
POSTで送信されたデータは
基本的にissetで入っているかどうか判定しないと
送信されてない初期の場合にはエラーがでるものなのでしょうか?

勉強に使っているサンプルコードは特にPOSTデータのisset判定はしていません
特定の環境だけエラーができるものなのですか?

141:nobodyさん
13/06/02 14:32:47.73
>>140
エラーが出る出ない以前に、issetで判定するべき

142:nobodyさん
13/06/02 14:36:07.32 ZugnqmP2
>>141
ありがとうございます
判定するようにします

143:nobodyさん
13/06/02 15:48:58.82 3Klk3b6H
長い文章を「。」の後ろの位置で切りたいと思いますが
/。/でsplitすると、。が消えてしまいます
「。」を「。|」など、句切り用文字付きに置換してから、
句切り用文字でsplitすると、望みの結果になると思いますが、
これを一度のsplitで行なう方法はありますか?

144:nobodyさん
13/06/02 15:53:09.15
splitはそういう関数だからな
pre_match_allとか使えばいいんじゃない

145:nobodyさん
13/06/02 16:17:08.70
>>137
質問ならID出せゴミ

146:nobodyさん
13/06/02 20:58:44.71
>>143
消えてるって分かってるんだから、切ったそれぞれの後ろで。足せよ

147:nobodyさん
13/06/02 21:00:10.83
>>146
頭わりーなw

148:nobodyさん
13/06/02 21:45:31.73
まあ、 preg_split('/(?<=。)/' ,$txt)  とかでどうかな。 


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch