質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

254閲覧

PHP:変数の初期化位置

Katasumi

総合スコア7

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/04/17 23:56

do whileで数字を羅列するコードを書いたときに
変数を初期化せずにループ内で使ってしましました。

その時の実行結果が下のようになったのですが、
・どうしてNULLの次がinit(0)ではなくinit(1)なのか
・$iはどこで初期化されて整数型と認識されたのか

が気になったのですがわかりません。

NULL int(1) int(2) int(3) int(4) int(5) int(6) int(7) int(8) int(9)

PHP

1do{ 2 var_dump($i); 3 $i++; 4}while($i < 10);

こういった質問サイトを使うのは初めてなので
何か足りない情報なども含めて
教えていただけたらと思います。

よろしくおねがいします。

バージョンはPHP7.0.27

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

どうしてNULLの次がint(0)ではなくint(1)なのか

++演算子は、NULLに適用すると1になります(PHPマニュアル)。

$iはどこで初期化されて整数型と認識されたのか

まず、未定義の変数を使うと、(E_NOTICEを出しながら)NULLとして認識されます。そして、上述のように、++の結果として整数が生成します。

なお、E_NOTICEといえども無視すべきでないのは間違いないです。エラーを全部表示する設定にすることをおすすめします。

投稿2018/04/18 00:07

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Katasumi

2018/04/18 00:25

回答ありがとうございます。 PHPマニュアルの変数ページばかり見ていて、 加減算の部分だとは盲点でした。 これからはE_NOTICEのようなエラー以外の通知も 気にできるようにしていきます。
guest

0

私の理解しているところを書いてみます。
(過不足ありましたらご指摘いただければと)

・どうしてNULLの次がinit(0)ではなくinit(1)なのか

1週目のvar_dump()時点では未定義のためNULLですが、
その週で$i++ されています。
$i = $i+1;の略ですね。

そこで定義され、それ以降の週は+1を繰り返しています。
PHPは型宣言をして初期化しなくても変数に値を設定できる言語です。

もちろん1週目のように何も値を設定せずに利用した場合はNULL(Noticeレベルのエラー)となりますが、
$i++で値が入ることになったため、それ以降はNULLではなく順次加算されている形となります。

もし初期化しないで使うことに違和感があるのであれば、使う前に初期化を入れておくと良いです。

・$iはどこで初期化されて整数型と認識されたのか

上述の通り、$i = $i+1;の略なので、変数に「整数が入った」と解釈され「整数型」となったわけですね。

投稿2018/04/18 00:03

編集2018/04/18 00:06
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/04/18 00:12 編集

自分のコメントからリンクしたPHPマニュアルにありますが、「$a = NULL;」の状況で、「$a++;」では1になるのに対して、「$a--;」では-1ではなくNULLのままになる、とのことです。 PHPにはよくある話ですが、まったく挙動の意味がわかりませんね…
m.ts10806

2018/04/18 00:11

> 「$a--;」ではNULLのままになる、とのことです。 なんと・・・! そこは-1にして欲しいところですね。 さすがに未定義のまま使うことはないので出会うことはない現象ですが・・
maisumakun

2018/04/18 00:17

同じページのコメントに書いてある「"9D9"」に++すると繰り上がって「"9E0"」、更に++すると、指数表記と認識されてしまって「float(10)」になるとか、誰得感しかない挙動ですね… こんなのがあると、ますます文字列にインクリメントを回して運用しようとは思えなくなります。
m.ts10806

2018/04/18 00:18

確かにそうですね。 PHPは数値まわりがあまり強くない印象なので仕方ないとは思いますが「ん?」となるのが多くて困ることはあります。
Katasumi

2018/04/18 00:22

回答ありがとうございます。 ビルトインサーバーのログにインクリメントしている部分で Undefined variableが出ていたので、この部分で 初期化されているという考えがありませんでした。納得しました。
m.ts10806

2018/04/18 00:24

なるほど。エラーメッセージがでているのであればそれもご提示ください。 「何も出てない」という理解をされてmaisumakunさんの回答の最後の1行のアドバイスがあります。 なるべく環境や情報は開示可能な限りだしておくようにしてください。 (質問テンプレート・質問のヒントを読むと良いです)
Katasumi

2018/04/18 00:29

mts10806さん そうですね。次から質問前にメッセージ周りにも 必要かどうか確認したいと思います。ありがとうございます 。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問