• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでのsubstr関数について)

PHPでのsubstr関数について

このQ&Aのポイント
  • PHPのsubstr関数について疑問があります。抽出開始位置と抽出する文字数の指定について理解したいです。
  • DOSプロンプト経由でのPEARのインストールでWarnningメッセージが表示されましたが、PEARの機能は問題なく使用できますか?
  • PHPで引数なしの関数(サブルーチン)を呼び出す方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

問1 プログラム上では、『文字列とは文字型データの配列である』という、プログラマとしての常識を前提として書かれているという事ですね。その、"手元のプチリファレンス"には。 (※正確には言語によっては『文字列とは文字列型のクラスである』という場合もあるので、厳密には正しくないが、概ね先の常識を踏襲していると言っていい) 一文字目は、配列インデックスで言えば0(番目)の文字。 問2 >Warnning というメッセージがちらほらと せっかくインストーラが出しているWarnningを読まずに、無視して何がしたいのでしょう? 使いたい機能が使えてるなら、それでいいんじゃないですか? それでイヤなら、ちゃんと読めばいいだけの話です。 問3 VBAに言語構造として、サブルーチンなどありません。 サブルーチンとは考え方、または実装の仕方の話です。 VBAでの Sub sub_keisan(){ } のような、書き方はサブプロシージャです。決してサブルーチンなどではありません。(サブルーチンとして実装したなら、サブルーチンではあるんでしょうが) VBAでは、値を返すプロシージャはFunction、値を返さないプロシージャはSubと別々に実装しているだけです。 PHPはすべて、どちらもFunctionで記述します。(引数を受け取る受け取らない、値を返す返さないはFunction記述者が自由に設計すればいいだけです。

dv8hjkwf
質問者

お礼

了解しました。0番目の文字が、最初になるわけですね。 警告内容を書かないとわかりませんよね。失礼しました。 どちらもFunctionで通じることを確認しました。てっきり別々のものがあるものと思っていました。

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

問2についてPEARはPHP4のころからの技術なので PHP5のバージョンと整合性がとれていないだけだと error_reporting(E_ALL ^ E_NOTICE); のようにエラーレベルを調整すればよいかと。 php.iniでも対応可能です。

dv8hjkwf
質問者

お礼

なるほど、バージョンによる整合性ですか。確認してみます。 回答ありがとうございました。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

1. 文字列の先頭を1文字目と数えるのは、現在メジャーな言語ではVB系くらい。他の言語は先頭は0文字目です。 配列のインデクスの始まりと合わせてるのでしょうね。Cだと文字列型は存在せず、文字の配列しか無いので、その影響だと思います。 2. 警告の内容次第ですが、エラーで無いので大丈夫では? 「警告が出たのですが大丈夫?」と聞かれても答えようが無いです。 3. VBのCallでも引数ありますよね。 引数なしのPHP functionはもちろんOKです。 >VBやVBAでいえば、Call文で呼んでくるような、 の言わんととするところが不明です。引数を括弧で囲まないという意味なら出来ません。

dv8hjkwf
質問者

お礼

配列と同じく、先頭は0から開始で納得しました。 警告内容については、これじゃ分かりませんね。失礼しました。特に、影響らしい影響はないみたいです。 引数なしの functionでうまくいきました。 ご回答ありがとうございました。

回答No.3

>抽出開始位置 ではなく、抽出を開始したい手前の位置 ではないのかと思いました。 http://jp2.php.net/manual/ja/function.substr.php >start が正の場合、返される文字列は、 string の 0 から数えて start番目から始まる文字列となります。 例えば、文字列'abcdef'において位置 0にある文字は、'a'であり、 位置2には'c'があります。 何故公式リファレンスを読まない? >手元のプチリファレンスには、 それにしても最近の糞プログラマは公式リファレンスすら読めないのか? 2. その肝心の中身を書かないでわかるかよ。 俺たちは君のPCを透視できる超能力者か? 3. そんな物必要ない。 それとすべての行を一行開けにするな。読みづらい。

dv8hjkwf
質問者

お礼

公式リファレンスにしっかり書かれていました。「位置 0にある文字は、'a'であり…」 さすがに警告内容を書かないとわかりませんね。 失礼しました。

noname#158634
noname#158634
回答No.1

問1 一般にプログラム言語におけるカウントは0から始まるからです。 問2 メッセージの内容も書かずに分かるわけがあるか(笑) 問3 呼び出そうとしているのが「引数なしの関数」であればその書き方で問題ありません。

dv8hjkwf
質問者

お礼

0からのカウント、了解しました。 配列と同じ考え方ですね。 メッセージ内容については失礼しました。これでは、分かりませんよね。 引数なしの関数の書き方について、確認しました。 ご回答ありがとうございました。