「PHP/入門/変数と値」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎readonlyプロパティ: const と似た仕組みに、PHP 8.1.0 以降のクラスのプロパティのreadonly修飾子があります。 ただし、readonly修飾子はプロパティにしか使えません。 また、クラスはクラススコープの定数「クラス定数」を定義することができます。 「PHP/クラス#コンストラクターとreadonlyプロパティ」および「PHP/クラス#クラス変数とクラス定数」を参照
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
print文は、echo文のシノニムではなく、echoだけが複数のパラメータを受取れる。
タグ: 2017年版ソースエディター
2 行
まず、PHPで加算や減算など四則演算を表示したい場合、
 
;例:<syntaxhighlight lang=php>
たとえば
<syntaxhighlight lang="php">
<?php
printecho (1+3)., "aaa".(, 50+8)., "<br />";
?>
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
4aaa58
</syntaxhighlight>
 
* PHPは2種類の文字リテラルの構文があります。1つは<code>"</code>(ダブルクォーテーションマーク)でくくる方法が、もう1つは<code>’</code>(ダブルクォーテーションマーク)でくくる方法です。<code>"</code>でくくると文字列の中の変数は展開されます。<code>’</code>でくくると文字列の中の変数は展開されません。
とすれば、HTMLで実行・表示すれば(つまり、apacheなどwebサーバ上でPHPを実行して、webブラウザでアクセスして表示すれば)、
::
4aaa58
* echo文は、print文と機能が似ていますが、引数を複数受け取ることができるので、コードがドット記号 <code>.</code>(文字列連結演算子)や<code>( )</code>(括弧)だらけになるのを避けることができます。
のように、表示されます。
*: 四則演算などの算術演算子と文字列連結演算子を1つの式で混在させる場合、計算値の範囲を丸カッコ ( ) で指定する必要があります。文字列連結演算子の方が高いからです。
 
* <syntaxhighlight lang=html5 inline><br></syntaxhighlight> はHTMLのBR要素(強制改行)です。もしウェブコンテンツとしてレンダリングしているのでなければ、改行されずにそのまま<syntaxhighlight lang=html5 inline><br></syntaxhighlight> が表示されます。
* 引用符<code>" "</code>は、その中を原則的に文字列だとして認識させる構文です(ただし後述するように、例外的に<code>{$a}</code>のような書式によって変数を埋め込むことができます、)。
* ドット記号 <code>.</code> は、文字列の連結をさせる意味を持ちます(文字列連結演算子)。
* <code><nowiki><br /></nowiki></code> はHTMLタグでの改行です。もしHTML以外の環境で実行表示しているなら、改行されずにそのまま<nowiki><br /></nowiki>が表示されるかもしれません。
* 四則演算などの算術演算子と文字列連結演算子を1つの式で混在させる場合、計算値の範囲を丸カッコ ( ) で指定する必要があります。文字列連結演算子の保が高いからです。
 
また、この表示後のページのソースコードを見ても(一般的なwebブラウザにはhtmlソースコード表示の機能がある)、
;実行結果:<syntaxhighlight lang=text>
4aaa58
4aaa58<br>
のように、計算後の値しか、書かれていない結果になります。
 
PHPはこのように、計算後の数値をHTMLに代入します。
 
このため、機密などを扱う場合、PHPを用いてソースコードの計算を隠す事もできます。
 
 
<syntaxhighlight lang="PHP">
<?php
print 60+7;
?>
</syntaxhighlight>
: 場合ように優先度の問題はな値が出力されてため、丸ることがわっこは不要でります。
: PHPはこのように、計算後の数値をHTMLに代入します。
 
=== サーバーサイドのレンダリングの仕組み ===
また、webブラウザのソースコード表示機能で見ても、ブラウザに表示されるのは、計算後の数値です。
PHPがウェブサーバー側で動いている時、.phpの拡張子のついたスクリプトファイルは、ウェブサーバーによってHTTPリクエストをきっかけにルーティングされ、PHPのプログラムとして実行されます。プログラムの実行結果は標準出力に書き出され、この時すでにHTMLの形式であり、echo や print の「結果」がレンダリングされています(されるようにプログラムを組みます)。ウェブサーバは、PHPで書かれたプログラムのレンダリング結果に、HTTPレスポンスヘッダーをつけユーザーエージェント(多くの場合ウェブブラウザ)に応答します(都度HTMLファイルが書かれるわけではありません)。
サーバーがwebブラウザにデータを送る前の段階で、PHPの式をもとに計算後の数値に置き換えてからhtmlを生成しています。そのため、htmlのどこにも計算式は無い状態です。htmlには、計算後の数値だけがあります。
このため、PHPで書かれたプログラムの内容はユーザーエージェント側には送信されません。
 
たとえば上記の<code> print 60+7;</code> とあるPHPファイルのwebアドレスをwebブラウザで見に行っても、表示されるのは
67
という表示結果だけです。また、そのページのソースコードを見ても「67」という文字列しかない状態です。
 
なお、webブラウザで見に行ってる「67」と表示しているページの正体は、たといアドレス名の末尾に「.php」とついていても、ブラウザが見ているのは実はhtmlファイルです。単にアドレス名の末尾に「.php」とついているだけのhtmlファイルをwebブラウザが見に行ってるにすぎません。
 
== 変数とは ==
変数とは、値に名前記録しつけおくためのものプログラム中から参照よにする仕組みです
変数は必ず名前を持ち、識別子のルールに従います。
 
変数は、プログラミングにおいて欠かせない。
 
== 変数の基本 ==
変数には、次の特徴がある。
 
:* 1つの値をもつ。(例外あり)
:* 最後に代入したものが入る。
 
これらの規則は、大抵ほかのプログラミング言語でも同じである。
 
== PHPの変数を扱う決まり ==
変数を示すとき、 $ を初めに書きましょう
また、変数の名前識別子は、最初の文字が _ もしくはアルファベットである必要があります。
 
つまり、
65 ⟶ 41行目:
:$_kkk54
 
OK変数名として有効ですが、
 
:$89aa
:$7_loop
 
などは使えないが変数名言う事しては無効あります。
 
PHPでは、変数名の大文字、小文字を区別しまるため、
$name $NAME $Name $namE $nAME
はすべて違う変数となります。
 
== 変数を使う ==
80 ⟶ 56行目:
変数を使うプログラムをかいてみる。
 
;例:<syntaxhighlight lang="PHP"php>
<?php
$a = 99;
 
printecho $a, PHP_EOL;
?>
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
 
これを実行すると
<pre>
99
</syntaxhighlight>
</pre>
: 上記コードは変数 $a に値 99を代入し、それをecho文によって表示するプログラムである。
と表示される。
:このように変数は、文字列を入れることもできる。
 
上記コードは変数 $a に値 99を代入し、それをprint文によって表示するプログラムである。
 
このように変数は、文字列を入れることもできる。
 
 
102 ⟶ 73行目:
ほかの例も下記に見ていこう。
 
;例::<syntaxhighlight lang=php>
例:
<syntaxhighlight lang="PHP">
<?php
$a = "こんにちは";
 
printecho "挨拶 : {$a}", PHP_EOL;
?>
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
 
これを実行すると、
<pre>
挨拶 : こんにちは
</syntaxhighlight>
</pre>
: このように、引用符の中に変数を埋め込むことができる。
と表示されるはずだ。
:: $aを{}で囲んでいるのは、分かち書きされていないと変数名を正しくparseできないためです。
 
このように、引用符の中に変数を埋め込むことができる。
 
:※ $aを{}で囲んでいるのは、近くにマルチバイトがあると、うまく展開できないことがあるため。
 
=== 変数と文字の連結 ===
PHP で変数と文字列を連結するとき、<code>.</code> を使う。(文字列と別の文字列の連結で使う<code>.</code>演算子と同一です。)
 
;例:<syntaxhighlight lang=php>
サンプル:
<syntaxhighlight lang="PHP">
<?php
$a = 7;
131 ⟶ 95行目:
?>
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
 
これを実行すると、サーバ実行されているHTML上では
<pre>
7 is answer
</syntaxhighlight>
</pre>
と表示される。
 
 
なお、下記のようにドット連結を使わなくても、同じ結果になるコードを書くことができる。
 
;例:<syntaxhighlight lang="PHP"php>
<?php
$a = 7;
print "{$a} is answer";
?>
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
7 is answer
</syntaxhighlight>
 
151 ⟶ 114行目:
print文とは別に、printf という末尾にfのついている関数があります。末尾にfのつくほうの printf 関数は、C言語に由来する関数です(C言語に同じ名前の関数があり、同じような書式で使います)。
 
:<syntaxhighlight lang="PHP"php>
<?php
$a = 7;
157 ⟶ 120行目:
?>
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
 
実行結果
<pre>
7 is answer
</syntaxhighlight>
</pre>
 
== 演算子 ==
PHPでは他のプログラミング言語同様、数学風の演算子式で計算を行う。
 
;例::<syntaxhighlight lang=php>
PHPでは(普通、プログラミング言語では)、計算式を用いることができる。
 
例:
<syntaxhighlight lang="PHP">
<?php
$num1 = 70;
175 ⟶ 134行目:
 
$sum = $num1 + $num2;
printecho $sum., "<br>";
$sum = $num1 - $num2;
printecho $sum., "<br>";
$sum = $num1 * $num2;
printecho $sum., "<br>";
$sum = $num1 / $num2;
printecho $sum., "<br>";
$sum = $num1 % $num2;
printecho $sum., "<br>";
?>
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
 
このPHPコードを組み込んだHTMLを実行表示すると、
 
<pre>
82
 
58
 
840
 
5.8333333333333
 
10
</syntaxhighlight>
</pre>
: ※ PHPの除算は、割り切れない場合の「/」の結果は浮動小数である。この型変換の規則は、プログラミング言語ごとに異なり、負の値が関連した時に特異的に特徴が出ることもあるので、PHPに限らず新しいプログラミング言語を習得するときのチェックポイントです。
と表示される。
 
<code>+</code>
は、足し算、
 
<code>-</code>
は、引き算、
 
<code>*</code>
は、かけ算、
 
<code>/</code>
は、割り算、
 
<code>%</code>
は、割り算のあまり、
 
をそれぞれ意味する演算子である。
 
 
: ※ PHPの除算は、割り切れない場合の「/」の結果は浮動小数である。(※ 他の言語では、整数になるものもあるので、混同しないように注意)。
:整数の範囲で割り算をしたい場合には、PHP7以降では<code>intdiv()</code> 関数を使うことで実現できる。
:PHP7以前でも、小数点斬り捨ての関数 floor()などで、割り算の整数値を求められる。
266 ⟶ 198行目:
は、それぞれ「演算子」と呼ばれる。
 
:<syntaxhighlight lang="PHP"php>
<?php
 
345 ⟶ 277行目:
ためしに下記コード例では、unsetの適用後、変数を参照しています。
 
:<syntaxhighlight lang="PHP"php>
<?php
$num1 = 70;
376 ⟶ 308行目:
発音的には null は「ヌル」または「ナル」などと読みます。
 
:<syntaxhighlight lang="PHP"php>
<?php
$num1 = 70;
410 ⟶ 342行目:
 
;コード例
:<syntaxhighlight lang="PHP"php>
<?php
print $w; // これ以前のどこでも$wを定義していない
444 ⟶ 376行目:
なお、下記コードのように変数の前に<code>@</code> アットマーク をつけることで、警告文などを非表示にすることができますが、これは単に非表示になっただけに過ぎず、大本のPHP本体の開発陣たちが未定義変数を非推奨にしていく開発方針の流れ自体は変わらないので、警告メッセージから目を背けるのではなく、変数の定義をするなどの対応をしておきましょう。なお、このようなPHPのアットマークの機能のことを「エラー制御演算子」といいます。
 
:<syntaxhighlight lang="PHP"php>
<?php
print @$w; // これ以前のどこでも$wを定義していない