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

【PHP】下らねぇ質問はここに書き込みやがれ 61

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/01/27(日) 18:17:59ID:jK32tI//
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 62
http://pc11.2ch.net/test/read.cgi/php/1199956159/

◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0002nobodyさん2008/01/27(日) 18:19:14ID:jK32tI//
【簡易FAQ】 (1/3)
1.文字コードは何を使えばいいの?
 →1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
 → http://example.com/が例文などのために予約されている。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
 → Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
 → 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
  「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
 → {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
 → cronかタスクスケジューラを使え。
7.extractって危険なの?
 →変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
 → URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
 → .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
10. そもそもインストールの時点でうまくいかない
 → 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
  Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
0003nobodyさん2008/01/27(日) 18:20:07ID:jK32tI//
【簡易FAQ】 (2/3)
11. SQLの質問はどこで?
 → データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
 → ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
 → 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
 → よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。
  http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40
15. クッキーの情報をユーザから隠したい
 → セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
 → strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
 → まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
 → C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
  参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(http://〜とか)を扱う際の限界
 → fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
  必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
 →19.を参照
0004nobodyさん2008/01/27(日) 18:20:39ID:jK32tI//
【簡易FAQ】 (3/3)
21. 画像処理一般 or GDの限界
 → ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
 → 好きにしてください
0005nobodyさん2008/01/27(日) 18:21:11ID:jK32tI//
関連リンク
■本家マニュアル   http://www.php.net/manual/ja/
■日本PHPユーザ会 http://www.php.gr.jp/
■PEARマニュアル  http://pear.php.net/manual/ja/
■メーリングリスト   http://ns1.php.gr.jp/mailman/listinfo/
■ZFマニュアル    http://framework.zend.com/manual/ja/

(以下英語)
■Smarty       http://smarty.php.net/
■Zend本家      http://www.zend.com/
■Zend Framework  http://framework.zend.com/
■php | architect   http://www.phparch.com/
■Smartyマニュアル http://smarty.php.net/manual/en/
■PECL本家(英語) http://pecl.php.net/
0006nobodyさん2008/01/27(日) 18:22:00ID:jK32tI//
■過去ログ
【PHP】下らねぇ質問はここに書き込みやがれ 62
http://pc11.2ch.net/test/read.cgi/php/1199956159/
【PHP】下らねぇ質問はここに書き込みやがれ 61
http://pc11.2ch.net/test/read.cgi/php/1198002831/
【PHP】下らねぇ質問はここに書き込みやがれ 60
http://pc11.2ch.net/test/read.cgi/php/1196511516/
【PHP】下らねぇ質問はここに書き込みやがれ 59
http://pc11.2ch.net/test/read.cgi/php/1195204145/
【PHP】下らねぇ質問はここに書き込みやがれ 58
http://pc11.2ch.net/test/read.cgi/php/1194084457/
【PHP】下らねぇ質問はここに書き込みやがれ 57
http://pc11.2ch.net/test/read.cgi/php/1193062236/
【PHP】下らねぇ質問はここに書き込みやがれ 56
http://pc11.2ch.net/test/read.cgi/php/1192092941/
【PHP】下らねぇ質問はここに書き込みやがれ 55
http://pc11.2ch.net/test/read.cgi/php/1191058556/
【PHP】下らねぇ質問はここに書き込みやがれ 54
http://pc11.2ch.net/test/read.cgi/php/1189309377/
【PHP】下らねぇ質問はここに書き込みやがれ 53
http://pc11.2ch.net/test/read.cgi/php/1188047468/
【PHP】下らねぇ質問はここに書き込みやがれ 52
http://pc11.2ch.net/test/read.cgi/php/1186794483/
【PHP】下らねぇ質問はここに書き込みやがれ 51
http://pc11.2ch.net/test/read.cgi/php/1185521566/
0007nobodyさん2008/01/27(日) 18:24:19ID:???
まあ一応使うけども
0008nobodyさん2008/01/27(日) 18:30:46ID:Nkn4j03s
1000 名前:nobodyさん 投稿日:2008/01/27(日) 18:30:02 ID:Nkn4j03s
1000Get!!
0009nobodyさん2008/01/27(日) 18:33:32ID:???
前スレ
>>997
国名でいいならAPNICのサイトからJPのIP割り当て範囲を調べ、
そのリストを作成してその範囲にマッチするか総当りチェック。
県名の場合は各プロバイダによるが、ホスト名から地域が推測できるので、
それのリストを作成してチェックする。
0010nobodyさん2008/01/27(日) 18:34:22ID:???
で、スレ番61になってるが本来ここは63ね。
0011nobodyさん2008/01/27(日) 18:39:08ID:???
> 991 名前:nobodyさん 投稿日:2008/01/27(日) 18:22:16 ID:IHMN/Cyj
> ああ埋まってしまう。
> >>983
> それでOKです。串さされたらどうしようもないですし。
> 方法を教えてもらえませんか?
> 専用の変数があるんでしょうか?

漏れ串でなければ、追いかけるのは不可能。その串のログでも
参照しない事には無理。
>>9が言うように、推測でやるしかないので、専用の変数(←これは
関数のことをいいたかったのかな?)というものももちろん無い。
0012nobodyさん2008/01/27(日) 18:44:53ID:IHMN/Cyj
>>9
前もってリストが必要なんですね。
ご回答ありがとうございます。

>>11
HTTP_REFERER や HTTP_USER_AGENT みたいに
クライアントが発信する国名を
(もちろん情報発信はクライアント依存なんで正確性はアレですけど)
一発で取ってくれる方法があるかと思ってたんです。
そもそも国名なんかはこっちで推測するしかないんですね。
ご回答ありがとうございます。
0013nobodyさん2008/01/27(日) 18:47:52ID:???
   _,,....,,_  _人人人人人人人人人人人人人人人_
-''":::::::::::::`''>   ゆっくりしていってね!!!   <
ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
 |::::::;ノ´ ̄\:::::::::::\_,. -‐ァ     __   _____   ______
 |::::ノ   ヽ、ヽr-r'"´  (.__    ,´ _,, '-´ ̄ ̄`-ゝ 、_ イ、
_,.!イ_  _,.ヘーァ'二ハ二ヽ、へ,_7   'r ´          ヽ、ン、
::::::rー''7コ-‐'"´    ;  ', `ヽ/`7 ,'==─-      -─==', i
r-'ァ'"´/  /! ハ  ハ  !  iヾ_ノ i イ iゝ、イ人レ/_ルヽイ i |
!イ´ ,' | /__,.!/ V 、!__ハ  ,' ,ゝ レリイi (ヒ_]     ヒ_ン ).| .|、i .||
`!  !/レi' (ヒ_]     ヒ_ン レ'i ノ   !Y!""  ,___,   "" 「 !ノ i |
,'  ノ   !'"    ,___,  "' i .レ'    L.',.   ヽ _ン    L」 ノ| .|
 (  ,ハ    ヽ _ン   人!      | ||ヽ、       ,イ| ||イ| /
,.ヘ,)、  )>,、 _____, ,.イ  ハ    レ ル` ー--─ ´ルレ レ´
0014nobodyさん2008/01/27(日) 18:50:21ID:???
環境変数だとaccept-langが参考になるくらいだな
そういうデータ売ってるとこもあるかも知れんが
まあ必要なら答えてもらえばいい
0015nobodyさん2008/01/27(日) 18:57:43ID:???
相手の国や県名を表示させるのって、それ自体が
製品となっているからな。今はそれを買うか、
全部自分で作るかの段階だろう。
0016nobodyさん2008/01/27(日) 19:02:00ID:IHMN/Cyj
>>14
おお、これクライアントの希望指定言語を取得できるんでしょうか。
いいですね。
日本からのアクセスか、それ以外かで
英語表記と日本語表記を切り替えたいので、
こっちのほうが処理も軽そうです。
0017nobodyさん2008/01/27(日) 19:11:35ID:???
>>16
それだけの目的ならHTTP_ACCEPT_LANGUAGE見るだけでいいよ
英語と日本語なら、jp以外を英語にしとけばいいんじゃない?
あとは切り替え用によくみる国旗のリンクみたいの用意しとけばOK
0018nobodyさん2008/01/27(日) 19:15:43ID:???
>>16
クライアントで設定されているWebサイト閲覧の言語の優先順位情報だから適宜だね。
複数設定されてる場合はja,en-US;q=0.7,ko-KR;q=0.3とかになるんで留意の程。
0019nobodyさん2008/01/27(日) 19:16:48ID:???
県って方言まで分けるつもりだったのかよ
0020nobodyさん2008/01/27(日) 20:21:13ID:???
そのとおりだにょ
0021nobodyさん2008/01/27(日) 21:00:26ID:IHMN/Cyj
>>17-18
アドバイスありがとうございます。
最初の二文字を切り取って判定するとよさそうですね。

>>19
言語判定だけじゃなくても保存しておけばソースとして有効でしょう。
情報は多いにこしたことはないかと。
0022nobodyさん2008/01/27(日) 22:49:36ID:???
PHPを隠蔽するため、.htaccessで拡張子.htmlでも動くように設定しました。
.htmlで動くようにはなったのですが、404 NotFoundのエラーを返すときに完全な白紙になってしまいます。
これはなぜでしょうか。また解決法はないのでしょうか。ご教授お願いします。

CentOS5 , Apache2.1 , PHP5.1.6

-.htaccess-
AddType application/x-httpd-php .html
ErrorDocument 404 /error/404.html

-/error/404.html-
純粋なhtmlファイル
0023nobodyさん2008/01/27(日) 23:10:47ID:???
>>22
エラーログにはなんか出てるの?
0024スレ”管理”人2008/01/27(日) 23:11:01ID:???
このごろスレが荒れ気味なので、夜は私がこのスレの仕切り役をさせて頂きます。
昼は仕事で忙しいので、昼は誰か良心的な方が仕切って下さい。

宜しくお願いします。
0025nobodyさん2008/01/27(日) 23:24:13ID:???
>>22
>>1
0026nobodyさん2008/01/27(日) 23:25:25ID:???
  シュッ
      シュッ
 シュッ   ハ,,ハ  シュッ
 ハ,,ハ彡( ゚ω゚ ),ハ
( ゚ω゚ )彡ミ( ゚ω゚ ) >>24 お断りします
_(__つ/ ̄ ̄ ̄/_
  \/      /
0027スレ””管理””人2008/01/27(日) 23:37:50ID:???
明日は仕事なので、今日はもう上がります。
昼の人、あとはよろしくお願いします。
0028スレ”管理”人2008/01/27(日) 23:49:18ID:???
>>27
偽者ご苦労さまです。しかも、名前をそのままコピペしたのがバレバレですよ。
0029nobodyさん2008/01/27(日) 23:50:30ID:JQB2UzdY
すみません、教えて頂きたいのですが、

本クラス
 private 名前
 private 値段

本棚クラス
 private 本を入れる配列

部屋クラス
 private 本棚を入れる配列


こういったクラスがあるとします。(ゲッター、セッターとかメソッドあり)
この時、部屋にある本の一覧を表示とかさせたい場合、どういった方法でやればいいのでしょうか?
foreachだとpublic以外取得出来ないみたいで、やり方がわからないんです。
よろしくお願いします。
0030nobodyさん2008/01/27(日) 23:52:15ID:???
>>29
誰が取り出すんだ?
0031nobodyさん2008/01/27(日) 23:56:40ID:???
ゲッターあるならそれで取り出せばいいじゃn
0032nobodyさん2008/01/28(月) 00:01:46ID:2wjTZIh4
cent osを使っています。
http://centossrv.com/ では
mysqlとphpの連結は書いてありますが、
php+postgresqlの連結が書いてありません。
書いているサイトとかしっていたらよろしくです。
文字コードはmysqlはutf8でpostgresqlはEUC-JPを使いたいのですが
これでいいですか?
default_charset = EUC-JP
mbstring.http_output = EUC-JP
mbstring.internal_encoding = EUC-JP
mbstring.http_input = ASCII,JIS,EUC-JP,SJIS
mbstring.detect_order = ASCII,JIS,EUC-JP,SJIS
mbstring.substitute_character = none
もし板違いなら誘導をお願いします。
linux板で書いていたんですが、答えもらえず
ここにきました。
よろしくです。
0033nobodyさん2008/01/28(月) 00:07:57ID:???
>>29
イテレータを定義すればforeachでも回るよ
詳しくは↓の奴が答えるから
0034nobodyさん2008/01/28(月) 00:09:51ID:???
タンスの角に小指をぶつけて
いてれーたー。
0035nobodyさん2008/01/28(月) 00:26:09ID:???
Javaじゃないんですうううううう
0036nobodyさん2008/01/28(月) 00:27:40ID:???
>>32
mysqlとphpの連結ってのがどこに書いてあるのか分からんわ

入出力を自動でEuc-jpにしたい、ということなら encoding_translation=On が必要
ただこうしてもDBへのInsertなんかが勝手にEuc-jpになるわけじゃないからね
自前でmb_convert_encodingすることが必要で、これはアプリの実装次第

あとdefault_charsetでeuc指定すると、出力がUtf8決めうちの奴は化けるので夜露死苦

http://jp2.php.net/mbstring
0037nobodyさん2008/01/28(月) 00:44:29ID:???
Iterator を implements して rewind(), valid(), key(), current(), next() あたりを作れば private でも foreach できる
この場合部屋クラスで IteratorAggregate を実装し、getIterator() によって Iterator を実装した自動回転式本棚クラスを返すようにすれば・・・

って PHP でわざわざそんなことするやつがおるかバカチン!
0038nobodyさん2008/01/28(月) 00:46:58ID:???
ワロタw 本末転倒だなJavaって。
0039nobodyさん2008/01/28(月) 00:52:51ID:???
もう全部publicでいいじゃんw
0040nobodyさん2008/01/28(月) 00:56:45ID:???
何でオブジェクト指向プログラミングの話をPHPスレに来て
質問するのか良く分からないが、本棚クラスにPrivateで
今どの本を取り扱っているのかを管理する変数を置いてない
から、出来ないだけだろ。
これはPHPが悪いのではない。オブジェクト指向の理論を
理解していない方が悪いのだ。
0041292008/01/28(月) 01:03:27ID:???
すみません、オブジェクト指向はまだ理解してないです。

>イタレーション
http://www.shigeweb.jp/php/project_p/?section=php5oop&page=iteration
ここら辺りでいいんですかね、ちょっと読んでみます。

>PHP でわざわざそんなことするやつが
普通に配列でやった方がいいってことですよね?
0042nobodyさん2008/01/28(月) 01:14:30ID:???
本当に勉強をする気があるのならば、PHPから離れて
「デザインパターン オブジェクト指向」とかでぐぐって
見た方がいいかと。
オブジェクト指向を学ぼうとしているのか、それとも
今目の前にある問題を解決出来ればそれでいい、
という考えなのか、良く分からないのだが。
0043nobodyさん2008/01/28(月) 01:14:57ID:???
まあ本の一覧を取得するゲッターを書けばそれで終わる話だからね
0044nobodyさん2008/01/28(月) 01:19:07ID:???
/error/ 内だけ AddTypeを戻してもだめ?
0045nobodyさん2008/01/28(月) 01:20:52ID:???
>>22あてだった。
0046質問2008/01/28(月) 01:24:42ID:CLWaFVui
phpでIMAPをやろうとしています。今

$arybox = imap_listmailbox($stream, $server, "*");

for ($i = 0; $i < count($arybox); $i++) {

list(,$name) = explode("}", imap_utf7_decode($arybox[$i]));

$line = explode(".", $name);
print ($line[count($line)-1]); ←この辺適当ですがw
}


のような感じでメールボックスの名前を表示させようとしています。
英語は問題ないのですが日本語のボックス名では文字化けと言うか
きちんと表示されません。
どのようにエンコードしても上手くいきません。
日本語できちんと表示させるにはどうしたらいいのでしょうか?
最終的にはUTF8で表示させたいのですが
よろしくおながいします。
004732です。2008/01/28(月) 01:54:25ID:2wjTZIh4
ってことはmysqlもeuc-jpにしたほうがいいかな?
;; 出力バッファリングを無効にする
output_buffering = Off

;; HTTP charsetヘッダを設定
default_charset = EUC-JP

;; デフォルトの言語を日本語にする
mbstring.language = Japanese

;; HTTP 入力変換を有効にする
mbstring.encoding_translation = On

;; HTTP 入力エンコーディング変換を auto に設定
mbstring.http_input = auto

;; HTTP 出力を EUC-JP に設定
mbstring.http_output = EUC-JP

;; 内部エンコーディングを EUC-JP に設定
mbstring.internal_encoding = EUC-JP

;; 無効な文字を出力しない
mbstring.substitute_character = none

でいくもんね。
でもmysqlをeuc-jpに変えることってできるんですか?
パッケージインストールでも。
0048nobodyさん2008/01/28(月) 02:03:38ID:???
>>47
なんかDB的に意味ない設定してるけど、運がよい場合に限り不具合は出ないだろう
mysqlの糞うざい自動コンバートの問題などもう少し調べたほうがいいかと思う
0049292008/01/28(月) 02:11:46ID:???
>>42
前もオブジェクト指向的な質問をしてJavaを勧められました。

何がやりたいのかというと、
処理を実行して作られたデータ(DBから取ってくるとか)を1つのオブジェクトに入れておいて、
表示する時にそのオブジェクトからデータを取って表示したいんです。
オブジェクトが1つならいいんですが、オブジェクトの中にオブジェクトとかになると…。
その辺りをどう処理したらいいのかわかなくて質問させて頂きました。
0050nobodyさん2008/01/28(月) 02:45:10ID:???
>>49
結局あと何が問題なんだ?
自作クラスなんだからどうとでも好きなように作れるじゃん。
正しいポリモーフィズムで実装したいってなら話は別だが
0051nobodyさん2008/01/28(月) 02:58:13ID:???
まずデータオブジェクトとそれに対する操作を分離して設計することを考える
データに対して「それを操作する」というアルゴリズムをオブジェクト見なす
データセットを舐めていく操作を最も汎用的な形にするとイテレータと呼ばれるものになる
これらをinterfaceや抽象クラスとして定義して利用する
データに操作を組み込みため、操作したいデータにinterfaceのメソッドを実装する

OO的思考
0052292008/01/28(月) 03:04:19ID:???
>>50
イテレータでいけそうです。
なんかオブジェクトの中のオブジェクトをとって、またその中の〜って感じで値を得るのが
いけてるのかな?と、もっと便利なやり方があるんじゃないのかと思ったのです。

質問に答えてくれた方々、ありがとうございました。
0053nobodyさん2008/01/28(月) 03:08:49ID:???
>ブジェクトの中のオブジェクトをとって、またその中の

後学のためにRecursiveIteratorとかGoFのCompositeパターンを見ておくといいかも。
しかし部屋-本棚-本の場合はそういう発想にはあわないと思うね。
0054292008/01/28(月) 03:12:14ID:???
>>53
おお、ありがとうございます。
参考になりそうです。
やっぱりデザインパターンは大事なのですね。
勉強したいと思います。
0055nobodyさん2008/01/28(月) 03:29:30ID:???
array $room->getShelf(pos)->getBooks([pos]) でいいんじゃないの
0056nobodyさん2008/01/28(月) 04:33:31ID:???
PHPで共用メモリが使えるってんで鼻息を荒くしたんですが、
借りてるスペースでは使えないことが分かりがっかりしました。

どうすればいいでしょう?
0057nobodyさん2008/01/28(月) 04:54:15ID:???
射精して落ち着いてください
0058nobodyさん2008/01/28(月) 07:50:37ID:???
部屋に居る人間が、本棚を特定する場合、どういうやり方に
なるのか決めてるのかなぁ。
「1番目、2番目の本棚」という感じでやるんだろうか。
本棚に収まっている書籍の特定も、何番目という数値で
いいのか、それとも名前がつけられるのかによって書き方は異なる。
前者でよければ、本棚とか何とか言うのは辞めて、
おとなしく配列でやった方がコーディングや処理が
早い場合も多数ある。
0059nobodyさん2008/01/28(月) 08:41:43ID:bzu6tb73
PHPのオブジェクト指向の考え方について質問させてください

class name($value) {
var $aaa = "hoge";
var $bbb = 100;
function getTotal($value2) {
$tax = $this->price * 0.05;
return $this->price + $tax;
}
}

こんな感じのスクリプトがあったとき(構文自体は間違いがあるかも)
$value や $value2 と引数?が入ってることがありましたけれども
これは例えばどこからこれらの変数に値が渡されて、
結果どのような変数に値がわたっていくのでしょうか?

0060nobodyさん2008/01/28(月) 08:51:21ID:???
>>59
めちゃくちゃすぎで答えようがないっす
0061nobodyさん2008/01/28(月) 09:07:27ID:bzu6tb73
60様
すみません。
質問の形を少し変えまして、$valueをこのクラスで活かすには
どのような形に書き換えればよろしいのでしょうか?
適当な例文などを示して頂ければ幸いです。
0062nobodyさん2008/01/28(月) 09:09:27ID:bzu6tb73
重ねてもうしわけありません。
私が示しておりました文は確かにめちゃくちゃでした。
訂正いたします

class name($value) {
var $mono = "hoge";
var $price = 100;
function getTotal($value2) {
$tax = $this->price * 0.05;
return $this->price + $tax;
}
}
0063nobodyさん2008/01/28(月) 09:17:33ID:???
>>60ではないけどひとつ言うと
classに引数は渡せない。

だから
class name
{
  var $aaa = "hoge";
  var $price = 100;

  function getTotal($value2)
  {
    $tax = $this->price * 0.05;
    return $this->price + $tax;
  }
}

なら分かるけど正直関数内で$value2が使われてないから無駄です。
$this->がついてるのはクラス内変数
何もついてないのは関数内変数(含 引数)。
0064nobodyさん2008/01/28(月) 09:20:01ID:???
>>62
いいや・・・

まず1点。1行目の
>class name($value)
ここはクラス名の宣言やら継承するクラスなどの指定をするだけ。
引数があるのはおかしい。
class Name {
とするのが正しい。

>function getTotal($value2) {
引数に$value2を指定しているのにもかかわらず、
このスコープ内において一度も出てきていない=不要。
0065nobodyさん2008/01/28(月) 09:23:45ID:???
それぞれの変数や関数が何をしようとしているのか推測しづらいので、レスも付きにくいかと。

クラスname : 商品を扱うクラス。商品名・単価をセットしたり、消費税を計算したりする。
$value : ?
$mono : 商品名
$price : 単価
getTotal : 消費税を加えた金額を取得する
$value2 : ?

パッと見では、クラスをnewする時に商品名・単価を設定したくて、それが$valueに入ってる?
$value2は分からん・・・getTotalの呼び出し元で一々代入せずに直接変数を設定してるつもりなのかな?
0066nobodyさん2008/01/28(月) 09:31:55ID:???
class name {
  var $mono = null;
  var $price = 0;
  function setMono($butsu) {
    $this->mono = $butsu;
  }
  function getMono() {
    return $this->mono;
  }
  function setPrice($nedan) {
    $this->price = $nedan;
  }
  function getPrice() {
    return $this->price;
  }
  function calc($tax) {
    return $this->price * $tax + $this->price;
  }
}

$obj = new Name();
$obj->setMono("ペン");
$obj->setPrice(100);
echo $obj->getMono()."の定価は".$obj->getPrice()."円で、税込み".$obj->calc(0.05)."円です";
0067nobodyさん2008/01/28(月) 09:56:26ID:???
>>66
なんでコンストラクタ使わないんだよ・・・。

function name($mono, $price)
{
$this->setMono($mono);
$this->setPrice($price);
}

って入れるだろ。
0068nobodyさん2008/01/28(月) 09:56:34ID:bzu6tb73
63様、64様、65様、66様
私の文を訂正して頂きましてありがとうございました。
$value については、構文上正しくない書き方であることが分かりましたし
皆々様よりご丁寧な説明文とともに、納得のいく説明を頂きましたお陰で、正しく理解できたと思います。

$value2 についてなのですが、どうしてもこの変数(メンバ変数?)を使いたい場合は
66様の構文で言うところのどこに$value2を使ってあげるとよろしいのでしょうか?

重ね重ね至らぬ質問をいたしまして恐縮です。
0069nobodyさん2008/01/28(月) 10:03:03ID:bzu6tb73
67様
お礼が遅れまして申し訳ありません。
ありがとうございました。

そのような構文の書き方ならば、functionの横に(引数)という形で書き入れても良いのですね。
参考になりました。
コンストラクタというのは、PHP5できちんと実装されたものだとマニュアルか何かで拝読いたしました。
私が使っている環境は、インターネット上のサーバに合わせている事もありPHP4.4.4をインストールしております。
そのような書き方でも大丈夫なのでしょうかと質問したいところなのですが
これは、自身で調べることにいたします。お手数かけまして恐縮いたします。

0070nobodyさん2008/01/28(月) 10:04:57ID:???
>>68

>function calc($tax) {
> return $this->price * $tax + $this->price;
> }

で$value2の代わりに$taxつかってるだろ。
ちゃんと嫁。
$taxを$value2って名前にしても同じ。



#因みにcalcって変数名はどうかと思う。
0071nobodyさん2008/01/28(月) 10:15:37ID:???
>>70
なんか横から聞いてて参考になった。thx!!
0072nobodyさん2008/01/28(月) 10:16:51ID:???
ttp://www.scollabo.com/banban/php/php_11.html
このあたりに書いているのを自分なりにアレンジしようとしたのか?
0073nobodyさん2008/01/28(月) 10:57:17ID:bzu6tb73
70様
ご指摘ありがとうございます。
お陰様で不明点がひとつ解決いたしました。

72様
実はそうなのです。
「コンピュータ」の部分や、「価格」の部分を変数から受け取る形を作りたくて
試行錯誤しておりました。
66様のように書いておけば、66様の下4行という形で「ペン」「100」「0.05」の値を
変数で渡すようにすることで実現可能なのだということがわかりました。

皆々様、ありがとうございました。
0074nobodyさん2008/01/28(月) 12:08:34ID:???
>>73
見てるサイトが悪いと思う。あんな意味のない例題普通出さないわ。
まぁがむばれ。
0075nobodyさん2008/01/28(月) 12:22:18ID:bzu6tb73
74様
励ましのお言葉ありがとうございます。
よろしければ、例題としてよい事例が挙げられているお勧めのサイトなど
ご存知でしたら、ご教授願えませんでしょうか?
質問にご回答頂いた上に厚かましい次第ですが、お聞き入れくだされば幸いです。
0076nobodyさん2008/01/28(月) 12:29:04ID:???
>>75
とりあえず〜〜様ってのやめれ
安価に汁、激しく読みにくい
0077nobodyさん2008/01/28(月) 12:33:38ID:???
>>76
様と殿と御中を使い分けるのは、匿名では不可能
0078nobodyさん2008/01/28(月) 12:41:20ID:???
殿が貴方様を欲しております。御中
0079nobodyさん2008/01/28(月) 12:49:30ID:???
ウォンチュ!
0080nobodyさん2008/01/28(月) 13:01:19ID:???
最近のサイトはアフィがくっついてるからな。
URL出すと宣伝乙といわれるから、自分にあったのを探せとしかいえないね。
Javaのほうが説明上手いとこが多い。PHPと構文はほぼ一緒なので理解できるはず。
0081nobodyさん2008/01/28(月) 13:02:52ID:???
>Javaのほうが説明上手いとこが多い。PHPと構文はほぼ一緒なので理解できるはず。

は???
0082nobodyさん2008/01/28(月) 13:18:47ID:???
オブジェクト指向をやろうと思うのであれば、解説サイトを探す他に、
ソースを読むという方法もある。それ以外には自分なりに課題を決めて
やってみるのも手だな。
(例)認証をしてメインメニューに入るまでの過程のプログラムで、
認証をするオブジェクトと、メインメニューのオブジェクトを作り、
コーディングしなさい。IDとパスワードの確認は別ファイルにある
リストと一致するかを確認するものとする。
0083nobodyさん2008/01/28(月) 13:21:20ID:wIYhLBDU
$varには、1と2しか値が入っていないこないと想定されるとき、

if ($var == 1) {

} else if ($var == 2) {

}

とするべきか、

if ($var == 1) {

} else if ($var == 2) {

} else {
// ここにエラー処理
}

とするべきかよく分かりません。
全てに後者の方法でやるとコードが冗長になるし、
「// ここにエラー処理」に何を書くべきかよく分かりません。

ご教授よろしくお願いします。
0084nobodyさん2008/01/28(月) 13:23:25ID:???
つかマニュアル読めよ・・・。ありえん。
0085nobodyさん2008/01/28(月) 13:26:28ID:???
84はbzu6tb73への言葉ね
>>83
俺だったらswitch-case
0086nobodyさん2008/01/28(月) 13:27:12ID:???
>>83
上のほうで十分。あと、phpの場合は「elseif」と書く。
場合によっては下のほうも書くが、君がそれを何処で知ったのか。
その理由は何であるのか。を理解していないのであれば、
書くだけ無駄。
0087nobodyさん2008/01/28(月) 13:29:02ID:???
>>83
$varが適切かどうかをチェックすれ
0088nobodyさん2008/01/28(月) 13:34:10ID:???
例外処理を冗長とか言うなよw
0089nobodyさん2008/01/28(月) 13:35:14ID:???
例外じゃないだろ
0090nobodyさん2008/01/28(月) 13:36:01ID:???
>>86
別にelse ifでも良いだろ。
0091nobodyさん2008/01/28(月) 13:38:12ID:???
>>90
>>86じゃないがPHPでもelse ifでかけるんだな。知らんかったわ。
0092nobodyさん2008/01/28(月) 13:39:12ID:???
>>83
ここのような初心者向けスレで聞くと、その答えは前者になる。が、普通は後者。
動けばいい、安全性より速さ、落ちたらその時に考えればいいというなら、前者の方がベスト。
0093nobodyさん2008/01/28(月) 13:39:35ID:???
>>89
1と2しか値が入っていないこないと想定されるときに1と2以外が入ってきた場合の処理は例外処理だろ。
try〜catchだけじゃ無いぞ。
0094nobodyさん2008/01/28(月) 13:42:46ID:???
いないこない、がチョトカワイイw
0095nobodyさん2008/01/28(月) 13:43:40ID:???
すいません確認したいのですが
$text = '0x41';
echo preg_replace( '/0x[0-9a-f]{2}/ie', 'chr($0)', $text);
のようなことは ereg_replace ではできないと考えてよいのでしょうか?
0096nobodyさん2008/01/28(月) 13:45:29ID:???
外から入ってくるものならifの前に$varが1か2じゃなかったらexit
中からのものならelse{echo '$varがおかしいぞー';print_r($var);}
とかデバッグ用にやってる 本番には消す 俺たいていプリントデバッグだし
0097nobodyさん2008/01/28(月) 13:50:04ID:???
チェック用のコードを本番で消すのか。俺は怖くてできんな。
0098nobodyさん2008/01/28(月) 13:50:24ID:???
>>95
http://jp.php.net/manual/ja/reference.pcre.pattern.modifiers.php

> e (PREG_REPLACE_EVAL)
> この修飾子を設定すると、preg_replace() は、(略)…
> この修飾子を使用するのは、preg_replace()のみです。 他の PCRE 関数では無視されます。
0099nobodyさん2008/01/28(月) 13:53:49ID:???
言葉が足りなかった 本番には(デバッグ用の定数読んで表示を)消す ね
0100nobodyさん2008/01/28(月) 14:00:11ID:???
たま〜に出るものだけど、何かのアプリ使ってると「予期しないエラー」
と表示されるでしょ?それは、この場合のelseになった場合だよ。

>>90
それは知らなかった。でも、公式マニュアルはスペース無しだw
0101nobodyさん2008/01/28(月) 14:12:20ID:???
>>98
オプションのeそのものが使えないのはわかるのですが
i の代わりになる regi のような文もあるかと思ったんですがなさそうですね。
■ このスレッドは過去ログ倉庫に格納されています