トップページ⇒php
1001コメント273KB

【PHP】ID出さなくても質問OKなスレ【初心者歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/09/15(月) 18:41:32ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
0497nobodyさん2008/12/16(火) 05:30:17ID:???
あ
0498nobodyさん2008/12/16(火) 05:34:28ID:???
>>496
エラー出ないよ
04994962008/12/16(火) 05:39:47ID:???
>>498
すみませんファイル転送時の問題かも知れません。もう少し調べてみます。
05004962008/12/16(火) 06:04:44ID:???
テキストエディタの設定でエスケープ文字が正しく保存されていませんでした。解決しました。ごめんなさい。
0501nobodyさん2008/12/16(火) 18:08:58ID:???

/**
 * @access public

のメソッドにつけるコメントの意味あいがいまいちわかりません。
この辺のドキュメントはありませんでしょうか?
検索しにくく、通常のアクセス修飾子に関してしかでてこず困っております。
0502nobodyさん2008/12/16(火) 18:26:54ID:???
javadocやphpdocというものを探してみれ
0503nobodyさん2008/12/17(水) 00:24:15ID:???
phpの関数内関数はもしかしてグローバル関数になりますか?

クラス内のメソッド内でローカルの関数のつもりで定義したのですが、
クラスのフィールドにアクセスできないみたいで泣けてました。

この辺に関する記述があるドキュメントはありませんでしょうか?
0504nobodyさん2008/12/17(水) 00:28:27ID:???
マニュアル
0505nobodyさん2008/12/17(水) 09:10:43ID:???
>>502
>>501ですが、PEARのphpDocumentorのページからマニュアルのリンクを見つけることができました。
ありがとうございました。

@accessについては、privateをつけるとphpDoc実行時--parseprivateをつけない時にドキュメントに表示されない、
くらいの意味合いみたいですね。

@access
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.access.pkg.html

phpDocumentor Tutorial
http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html
0506nobodyさん2008/12/17(水) 10:02:58ID:???
>>504
ありがとうございます。

「関数内関数」で見つけられず、「inner function」で検索したところ
(何故かw)以下のページが見つけられました

PHP: 関数 - Manual
http://jp.php.net/manual/ja/language.functions.php

> PHP では、関数やクラスはすべてグローバルスコープにあります -
> 関数の内部で定義したものであっても関数の外部からコールできますし、
> その逆も可能です。

「例3 関数の中の関数」の例と上記の解説だけではよくわからないのですが、
クラス内メソッドで宣言してもメソッドにならずにグローバル関数になる、という解釈であっているようです。

webでも検索単語がわるいのか、この手の話題を扱っている人がいなくてちょっと悲しい
0507nobodyさん2008/12/17(水) 10:07:45ID:???
>>506

> クラス内メソッドで宣言してもメソッドにならずにグローバル関数になる

こんなことどこにも書いてないでしょ。
基本的過ぎて誰も書かないけど、
マニュアルのクラスとオブジェクト(PHP5)のところも読んでみたら?
0508nobodyさん2008/12/17(水) 10:11:09ID:???
あぁ、ていうかもう少し正確にわかりやすく書いてくれ

クラスメソッドのなかでfunction宣言やclass宣言をしたりインクルードした場合に
内部関数や内部クラスになるかというとそれはない。
PHPでは、functionもclassもグローバルという解釈であってる。
0509nobodyさん2008/12/17(水) 10:13:26ID:???
クラス内メソッドじゃなくてクラスメソッド内な
じゃないと、
クラス内メソッドとして宣言してもと、読み間違える(って俺の日本語力のせい?)
0510nobodyさん2008/12/17(水) 10:23:23ID:???
昔はそれなりに質問らしい質問してたと思うんだけど、近頃は酷すぎるねぇ。
質問もこれだけしてたら質が向上しそうなもんだけど、
>>322を見る限り、池っぷりは明白だし難しいんだろうなぁ・・・
0511nobodyさん2008/12/17(水) 10:24:01ID:???
↑誤爆ですw
05125062008/12/17(水) 17:06:31ID:???
>>507-508
すまそ。ちょっとphpの用語というか全般に慣れてない成果、互換を与えているみたいです。

こういう状況を想定しています。Hoge::mageメソッドのhoge内から$thisにアクセスできないので、
グローバルなんだ、と判断してしまっていました。

class Hoge
{
 var $foo;

 function mage()
 {
  function hoge()
  {
   $this->foo; #アクセスできない!?
  }
 }

}
0513nobodyさん2008/12/17(水) 17:16:56ID:???
>>512
了解。それ、正しい判断です。
0514nobodyさん2008/12/17(水) 19:25:55ID:???
print<<<eof
<table width="367" border="1">
<tr>
<td width="84">'htmlspecialchars'($post['content'])</td>
<td width="267">htmlspecialchars($post['name'])</td>
</tr>
</table>
eof;

エラーが出ます 助けてください><
0515nobodyさん2008/12/17(水) 19:39:45ID:???
つ ttp://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc
配列を使うときの誤用
0516nobodyさん2008/12/18(木) 12:27:03ID:???
>>514
ヒアドキュメント内では関数は使用できない
ヒアドキュメント内で変数を使う場合{}で囲む癖をつける{$post['content']}
グローバル変数の$_POSTとどうも勘違いしてるような気がするが
$postという変数を用意してるならそっちでhtmlspecialcharsをやる
$post['content'] = htmlspecialchars($_POST['content']);
05175062008/12/18(木) 13:34:14ID:???
>>513
ありがとうございます。理解がふかまりました。
0518nobodyさん2008/12/18(木) 13:36:48ID:???
配列の中のフラグがたっている数を調べたいのですが、
もっと一発で格好良く書く方法はありませんでしょうか?

$correct_count = 0;
foreach ($results as $result) {
  if ($result->is_correct) { $correct_count++; }
}

$results は、stdClassでis_correct(boolean)をプロパティに持つ Array です。

0519nobodyさん2008/12/18(木) 13:37:45ID:???
すいません。わかりにくいので、単純化しました。

$count = 0;
foreach ($flags as $flag) {
  if ($flag) { $count++; }
}
0520nobodyさん2008/12/18(木) 13:41:16ID:???
配列の中のフラグを立てるコードも書かないと誰も答えてくれないよ
0521nobodyさん2008/12/18(木) 13:58:30ID:???
>>520
すいません。こんな感じです。(例です)

$flags = array(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE);
$count = 0;
foreach ($flags as $flag) {
  if ($flag) { $count++; }
}

RubyのEnumerable#countみたいにさっくりいける関数がないかと思っていたのです。
flags.count {|x| x }

また、
$count = array_count_values($flags)[TRUE];
でいけるかと思ったのですが、array_count_valuesは
stringとinteger以外(上記のbooleanとか)だと例外が発生するみたいで使えないっぽいですね。
0522nobodyさん2008/12/18(木) 14:06:09ID:???
つgrep
0523nobodyさん2008/12/18(木) 16:28:40ID:???
array_map
05245212008/12/19(金) 18:09:01ID:???
ありがとう。
phpは向かないのに、ゴルフしようとするクセがあってスマソ
短くしたかっただけなのです。
0525nobodyさん2008/12/19(金) 18:19:12ID:???
いいってことよ
0526nobodyさん2008/12/20(土) 08:02:14ID:???
>>521
$flags = array(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE);
echo count(array_keys($flags, false, true));
05275212008/12/20(土) 14:36:33ID:???
>>526
うお、検索一致した配列を返す関数あったのか!
サンクスです。
0528nobodyさん2008/12/20(土) 14:58:54ID:???
礼はいらねえ
そんくらいいいってことよ
0529nobodyさん2008/12/20(土) 15:02:39ID:???
冗長だからお勧めはしない。素直にループで数えた方が速い。
それに、booleanしか格納しないなら配列はお勧めしない。
0530nobodyさん2008/12/20(土) 15:12:01ID:???
なんで?
0531nobodyさん2008/12/20(土) 15:40:52ID:???
なにが、なんで?
05325292008/12/20(土) 15:47:42ID:???
説明できないけどフィーリングでそうオモタから書いたんだけどね
サーセン
0533nobodyさん2008/12/20(土) 15:55:21ID:???
フィーリングて(呆)
0534nobodyさん2008/12/20(土) 16:17:53ID:???
529じゃないけど、説明できるけどね。
何が知りたいのかわからん
0535nobodyさん2008/12/20(土) 16:20:44ID:???
じゃ529を全部説明してくれ
0536nobodyさん2008/12/20(土) 16:22:20ID:???
だから、全部ってなんだよ
0537nobodyさん2008/12/20(土) 16:41:51ID:???
何が知りたいのかわからないんじゃなくて
元もわからないから説明できないんでしょ
0538nobodyさん2008/12/20(土) 16:46:09ID:???
2行しか書いてないくせにどこと指定されないと説明できないのかw
0539nobodyさん2008/12/20(土) 16:48:10ID:???
2行しか書いてないのに、どこに疑問を持ってるのか書けないのかw
0540nobodyさん2008/12/20(土) 16:49:19ID:???
だから全部だって。自分の書いた文章なのにトピックごとに分割できないの?
0541nobodyさん2008/12/20(土) 16:52:44ID:???
全部って具体的に書けよ
0542nobodyさん2008/12/20(土) 16:54:56ID:???
PHP関係のスレの低脳の多さは異常だな
0543nobodyさん2008/12/20(土) 17:01:43ID:???
実際には低能が多いというよりも、数名の低能が荒してるんだけどね。
特にIDスレに発生したスパム質問には呆れる。
そのうちここにも来るかもなw
0544nobodyさん2008/12/20(土) 18:03:48ID:???
ようは知ったか野郎がここに発生してるわけだな
説明できるならどこそこ言わなくても言えるわけだから
0545nobodyさん2008/12/20(土) 20:56:19ID:???
しつこさに笑える。
その面白さに免じて釣られたるわ。
冗長だからお勧めはしない。 => 配列を再育成する分オーバーヘッド
素直にループで数えた方が速い。 => ステップ数から速いのは自明
それに、booleanしか格納しないなら配列はお勧めしない。
 =>用途によるが固定長ならビット演算、複雑ならオブジェクト内でロジックを実装(たとえばFilterIterator)
0546nobodyさん2008/12/20(土) 20:59:29ID:???
ちなみに、>>526を書いたのも俺だから、
他人のソースを批判してるわけじゃないんで、勘違いのないように
0547nobodyさん2008/12/20(土) 23:20:26ID:???
>>545
そんな理由か。やっぱり低脳乙
0548nobodyさん2008/12/20(土) 23:49:04ID:???
乙、乙
0549nobodyさん2008/12/21(日) 00:17:37ID:???
理由もなにもあるかよ。常識だからな。
nbへのサービスだよ
0550nobodyさん2008/12/21(日) 16:55:41ID:???
10枚くらいCSVファイルあるんですけど
これを一気に検索することは可能ですか?

10枚をまとめて1枚にすればいいんですよね
でも重くなりそう・・・
0551nobodyさん2008/12/21(日) 17:01:00ID:???
仕方ないじゃん
それがイヤなら最適化するなり工夫しろ
0552nobodyさん2008/12/21(日) 17:09:10ID:???
ですよね
ありがとうです
05535212008/12/21(日) 23:33:23ID:???
俺の質問のせいであれてた('A`)

>>545
> 冗長だからお勧めはしない。
> 素直にループで数えた方が速い。
いや、速くなくても コードが冗長じゃなければおkでした

> booleanしか格納しないなら
元のコードは >>518 なんで・・・

というかゴルフしたかっただけです(´・ω・`)
05545212008/12/21(日) 23:34:39ID:???
よく考えたら、>>518だと>>526はできないのか・・・(´・ω・`)
0555nobodyさん2008/12/22(月) 07:48:41ID:???
>>518はイミフだよな
$resultsは$resultの集合でしょ。$resultがオブジェクトだよな?

設計に問題がなければArrayObjectを使うなり、オブジェクト側で
implements countable してcount()を実装すれば、
利用側はcount($results)でok
0556nobodyさん2008/12/22(月) 09:08:51ID:???
555は?
0557nobodyさん2008/12/22(月) 13:09:41ID:???
はい?
05585212008/12/22(月) 13:29:24ID:???
クラス定義するまでもないけど、hash(Array)っぽいアクセスじゃいやんで、
構造体っぽくみせたいときに
stdClassつかうもんだと思ってたんですが、そういうわけでもない?
0559nobodyさん2008/12/22(月) 13:29:53ID:???
stdClassなんて使う必要あるか?
05605212008/12/22(月) 13:44:12ID:???
ああ、わかた。>>555 は設計によるけどちゃんとクラス化してそのメソッドにしるってことか
countになるかはわからんけど・・・

多分、2回以上カウントする必要がある時は、冗長性はさけて
関数化→クラス化→メソッド化
ってなると思います。

クラスのプロパティが簡単に設定できれば
お気軽にクラス化できるんだけど・・・
0561nobodyさん2008/12/22(月) 13:49:46ID:???
>>558
stdClassの使い方として、それはいいと思うけど、
実際に何がやりたいのかがわからんと、それ以上は云々できんわな。
stdClass使うのに、$resultsを配列にしちゃう理由が思い浮かばん。
05625212008/12/22(月) 13:56:07ID:???
> クラスのプロパティが簡単に設定できれば
stdClassみたいに使うには、
public $hoeg = 1234;
クラス内でみたいにpublicにするだけでいいんですね。勉強不足でした。

>>561
> 実際に何がやりたいのかがわからんと、それ以上は云々できんわな。
ああ、いや、まあ実際そうですね。

最近、CodeIgniterをいじっているんですが ActiveRecordがクエリーを返す時に、
stdClassのArrayで返してくるものですから、
適当な構造の配列を関数から返す時とか、
そういう風につかっていいもんだと思って使ってました。
0563nobodyさん2008/12/22(月) 14:07:03ID:???
なるほどね。
0564nobodyさん2008/12/22(月) 14:11:42ID:???
stdClassの利点って何?
0565nobodyさん2008/12/22(月) 14:29:48ID:???
stdClassでとりあえず動くシステムを書いておけば、
あとから、自前でメソッドを追加したときに、他の部分を変更しなくて済む、とか。
0566nobodyさん2008/12/22(月) 16:44:43ID:???
PDOStatement->fetchObject みたいな使い方があるね。
DBからの戻り値を使いたい状況に合わせてクラス指定して取得するとかで、
拡張性を担保する。特に指定がないときはstdClass
0567nobodyさん2008/12/22(月) 17:50:23ID:???
いやだからそのクラス指定して取得するメリットは?
0568nobodyさん2008/12/22(月) 17:56:59ID:???
> いやだからそのクラス指定して取得するメリットは?

> 拡張性を担保する。

めくらなの?
0569nobodyさん2008/12/22(月) 18:14:51ID:???
568 名前:nobodyさん[sage] 投稿日:2008/12/22(月) 17:56:59 ID:???
> いやだからそのクラス指定して取得するメリットは?

> 拡張性を担保する。

めくらなの?
0570nobodyさん2008/12/22(月) 18:45:36ID:???
>>568
どう拡張性が担保されるの?
0571nobodyさん2008/12/22(月) 19:29:44ID:???
>>567
メリットがない者にはわからない。それだけのこと。
たぶん、君にとってメリットはない
0572nobodyさん2008/12/22(月) 19:31:06ID:???
>>571
君にはどういうメリットがあるの?
0573nobodyさん2008/12/22(月) 19:42:16ID:???
>>572
たとえば、
class rowFilter {
public function __set($name, $val) {
$this->{$name} = someFilter($val);
}
}
のようなクラスを用意して、自動フィルタを使い分けるとか。
複数カラムの値を自動計算させて仮想の別カラムを作ったりとか。
0574nobodyさん2008/12/22(月) 19:57:25ID:???
そんなんfetchObjectでなくてもできね?
0575nobodyさん2008/12/22(月) 19:58:03ID:???
だから、そんな君にはメリットはない。
0576nobodyさん2008/12/22(月) 19:58:47ID:???
なんだ自分が分かってないんじゃん
0577nobodyさん2008/12/22(月) 19:59:21ID:???
はあ?
0578nobodyさん2008/12/22(月) 20:24:50ID:???
ぼくにはさっぱり>>573がどんなメリットなのかわかりません
0579nobodyさん2008/12/22(月) 20:32:28ID:???
キモッ☆マジキチだらけのPHPスレ!
0580nobodyさん2008/12/22(月) 20:33:10ID:???
>>571と同じ。
>>573の方法を設計に生かしたいと思うかどうか。
生かしたいと思わない者にとってはメリットはない。
0581nobodyさん2008/12/22(月) 20:48:51ID:???
あれさ、O/Rマッパーを1行で実現できると言っても
ループしてnewすりゃいいじゃんって奴には(ry
0582nobodyさん2008/12/22(月) 21:09:46ID:???
>>580
自演乙!
0583nobodyさん2008/12/22(月) 21:11:58ID:???
>>582
自演であることを証明してみろ。
0584nobodyさん2008/12/22(月) 21:12:15ID:???
乙、乙
なんか、このところの定番?この流れ
0585nobodyさん2008/12/22(月) 21:13:02ID:???
あれw
0586nobodyさん2008/12/22(月) 21:14:15ID:???
>>583
だいたい、何と何が自演だよ
0587nobodyさん2008/12/22(月) 21:18:40ID:???
自分で理由もなしに何となくで使ってるところを指摘され、
利点を説明もできず、必死に言い訳を取り繕っている様はこんな感じ

                  ヽ人人人人人人人人人人人人人人人人人人人人人人人人人人人
         / ̄(S)~\  <                                        >
       / / ∧ ∧\ \<  そんな君にはメリットはない! そんな君にはメリットはない! > 
       \ \( ゚Д,゚ ) / /<                                        >
         \⌒  ⌒ /  ノ Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´
          )_人_ ノ  
          /    /
      ∧_∧ ■□ (    ))
     (   ; )■□  ̄ ̄ヽ
   γ⌒   ⌒ヽ  ̄ ̄ノ  ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
0588nobodyさん2008/12/22(月) 21:23:23ID:???
必死だな
0589nobodyさん2008/12/22(月) 21:25:24ID:???
ひさしぶりに「必死だな」とか頭の足りてない言葉見た。
どんだけオッサンなんだよ。お互いに。
0590nobodyさん2008/12/22(月) 21:28:54ID:???
てかさ、恥ずかしくない?

> 利点を説明もできず
0591nobodyさん2008/12/22(月) 21:30:16ID:???
何が?
0592nobodyさん2008/12/22(月) 21:31:03ID:???
説明してみろよ、説明できないんならわかっていないと見做すとか
0593nobodyさん2008/12/22(月) 21:33:43ID:???
で?
0594nobodyさん2008/12/22(月) 21:35:37ID:???
http://pc11.2ch.net/test/read.cgi/php/1228667259/840
0595nobodyさん2008/12/22(月) 21:41:08ID:???
んなこたぁわかってる
0596nobodyさん2008/12/22(月) 21:51:45ID:???
DBレコードをモデルに割り当てるときに、DBからfetchして手動でオブジェクトに
割り当てるコードを書くよりも、実装のみ書いてfetchObjectに投げればモデルを
取得できるというメリットは、
スピーディーにORMを書きたい人にとってはメリットはあるが、
そうでない人には、意味がないってだけ。

「君にはメリットはない」て言葉、そんなにひっかかるか?>>587
バカにされたとでも思ったんなら誤解だよ
■ このスレッドは過去ログ倉庫に格納されています