電子書籍の厳選無料作品が豊富!

PHPで、3問ほど質問です。


問1
PHPでプログラムを作成していて、思った結果が出てこないので、変数やら配列やらの

中身を表示させつつ、原因らしきものを突き止めました。

substr関数 です。


手元のプチリファレンスには、

substr(元の文字列,抽出開始位置,抽出する文字数)

のようなことが書いてあるのですが、

抽出開始位置 ではなく、抽出を開始したい手前の位置 ではないのかと思いました。

というのも、

echo substr("abc",0,1); は、a が表示されますし、

echo substr("abc",3,1); は、何も表示されないからです。


というわけで、

substr(元の文字列,抽出を開始したい手前の位置,抽出する文字数)

でいいのでしょうか?

○文字目から数えて、△文字分としたときにずれて表示されるので、ヘンだな~と

思っているのですが…。


問2
DOSプロンプト経由で、PEARをインストールしてみました。
(自分のパソコンです。XAMPPを使用しています)

最終的にinstall ok と表示されましたが、Warnning というメッセージがちらほらと。

大丈夫なんでしょうか? ただ、PEARの機能は使えましたが…。


問3
値を送る・返す関数ではなく、PHPで、サブルーチンというか、VBやVBAでいえば、Call文で

呼んでくるような、文の書き方を教えてください。

sub_keisan();


function sub_keisan(){

}

のような引数なしの関数の書き方でいいのでしょうか?

A 回答 (5件)

問1


プログラム上では、『文字列とは文字型データの配列である』という、プログラマとしての常識を前提として書かれているという事ですね。その、"手元のプチリファレンス"には。
(※正確には言語によっては『文字列とは文字列型のクラスである』という場合もあるので、厳密には正しくないが、概ね先の常識を踏襲していると言っていい)
一文字目は、配列インデックスで言えば0(番目)の文字。

問2
>Warnning というメッセージがちらほらと
せっかくインストーラが出しているWarnningを読まずに、無視して何がしたいのでしょう?
使いたい機能が使えてるなら、それでいいんじゃないですか?
それでイヤなら、ちゃんと読めばいいだけの話です。

問3
VBAに言語構造として、サブルーチンなどありません。

サブルーチンとは考え方、または実装の仕方の話です。
VBAでの
Sub sub_keisan(){

}
のような、書き方はサブプロシージャです。決してサブルーチンなどではありません。(サブルーチンとして実装したなら、サブルーチンではあるんでしょうが)
VBAでは、値を返すプロシージャはFunction、値を返さないプロシージャはSubと別々に実装しているだけです。
PHPはすべて、どちらもFunctionで記述します。(引数を受け取る受け取らない、値を返す返さないはFunction記述者が自由に設計すればいいだけです。
    • good
    • 0
この回答へのお礼

了解しました。0番目の文字が、最初になるわけですね。

警告内容を書かないとわかりませんよね。失礼しました。

どちらもFunctionで通じることを確認しました。てっきり別々のものがあるものと思っていました。

お礼日時:2011/10/29 23:45

問2についてPEARはPHP4のころからの技術なので


PHP5のバージョンと整合性がとれていないだけだと

error_reporting(E_ALL ^ E_NOTICE);
のようにエラーレベルを調整すればよいかと。
php.iniでも対応可能です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/10/29 23:49

1.


文字列の先頭を1文字目と数えるのは、現在メジャーな言語ではVB系くらい。他の言語は先頭は0文字目です。
配列のインデクスの始まりと合わせてるのでしょうね。Cだと文字列型は存在せず、文字の配列しか無いので、その影響だと思います。

2.
警告の内容次第ですが、エラーで無いので大丈夫では?
「警告が出たのですが大丈夫?」と聞かれても答えようが無いです。

3.
VBのCallでも引数ありますよね。
引数なしのPHP functionはもちろんOKです。

>VBやVBAでいえば、Call文で呼んでくるような、
の言わんととするところが不明です。引数を括弧で囲まないという意味なら出来ません。
    • good
    • 0
この回答へのお礼

配列と同じく、先頭は0から開始で納得しました。

警告内容については、これじゃ分かりませんね。失礼しました。特に、影響らしい影響はないみたいです。

引数なしの functionでうまくいきました。
ご回答ありがとうございました。

お礼日時:2011/10/29 23:36

>抽出開始位置 ではなく、抽出を開始したい手前の位置 ではないのかと思いました。


http://jp2.php.net/manual/ja/function.substr.php
>start が正の場合、返される文字列は、 string の 0 から数えて start番目から始まる文字列となります。 例えば、文字列'abcdef'において位置 0にある文字は、'a'であり、 位置2には'c'があります。
何故公式リファレンスを読まない?
>手元のプチリファレンスには、
それにしても最近の糞プログラマは公式リファレンスすら読めないのか?

2.
その肝心の中身を書かないでわかるかよ。
俺たちは君のPCを透視できる超能力者か?

3.
そんな物必要ない。

それとすべての行を一行開けにするな。読みづらい。
    • good
    • 0
この回答へのお礼

公式リファレンスにしっかり書かれていました。「位置 0にある文字は、'a'であり…」

さすがに警告内容を書かないとわかりませんね。
失礼しました。

お礼日時:2011/10/29 23:41

問1


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

0からのカウント、了解しました。
配列と同じ考え方ですね。

メッセージ内容については失礼しました。これでは、分かりませんよね。

引数なしの関数の書き方について、確認しました。
ご回答ありがとうございました。

お礼日時:2011/10/29 23:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報