著者は、 Write for DOnations プログラムの一環として、 Open Sourcing Mental IllnessLtdを選択して寄付を受け取りました。

序章

プログラミングでは数字は非常に一般的です。 これらは、画面サイズの寸法、地理的な場所、お金、ポイント、ビデオで経過する時間、ゲームアバターの位置、数値コードの割り当てによる色などを表すために使用されます。

プログラミングで数学演算を効果的に実行できることは、数値を扱う頻度が高いため、開発するための重要なスキルです。 数学の高度な理解は確かにあなたがより良いプログラマーになるのを助けることができますが、それは前提条件ではありません。 数学のバックグラウンドがない場合は、数学を、達成したいことを達成するためのツールとして、そして論理的思考を向上させる方法として考えてみてください。

PHPでは、integersfloatsの2つの数値データ型を使用します。

  • 整数は、正、負、または0(…、 -1, 0, 1、…)。
  • 浮動小数点数、または浮動小数点数は、小数点を含む実数です( 9.0 また -2.25).

このチュートリアルでは、PHPの数値データ型で使用できるさまざまな演算子と、PHPが「型ジャグリング」および組み込みの数学関数を処理する方法について説明します。

オペレーター

演算子は、1つ以上の値(またはプログラミング用語では)を取り、別の値を生成するものです(構造自体が式になるように)。 演算子は、値に基づいてアクションを実行するようにプログラムに指示するなど、基本的な意思決定に使用されます。

代入演算子

最も基本的な演算子は代入演算子で、単一の等号です。 =. この代入演算子は、変数の値を設定するときに使用されます。 変数は箱のようなものです。 多くの異なるものが箱に保管されるかもしれません。 ボックスに追加のアイテムが追加される場合があります。 ボックス内のアイテムは、並べ替えたり、それぞれにステッカーを貼ったりすることができます。 ボックスを空にして、新しいものをボックスに追加することもできます。 これは、コードで変数が使用されたときに起こることです。 変数には名前が付けられ、その名前付き変数には次の値が割り当てられます。

$box=3;
var_dump($box);
$box="Hello";
var_dump($box);

変数タイプと値を確認するには、 var_dump() 代わりに関数が使用されます echo. 名前の付いた変数 $box の値が 3. その後、同じ $box 変数には、の新しい値が割り当てられます "Hello". これは、ボックスを空にして新しいものを追加するのと同じです。 今、 var_dump() 関数が呼び出されると、値に関するまったく異なる情報が得られます。 $box 変数:

Output
int(3) string(5) "Hello"

最初の割り当ての後、 $box 変数には、の整数値が含まれます 3. 2番目の割り当ての後、 $box 変数には、「Hello」に一致する5文字の文字列が含まれています。

私たちを作るために $box もっと便利なのは、次のタイプの演算子を見てみましょう。

算術演算子

PHPには、電卓やペンや紙と同じようにコンピュータープログラムで機能する算術演算子があります。 注意すべき重要な側面は、操作に使用される記号です。 最も一般的な算術演算子を見てみましょう。

追加+):最初の値から始めて、その数値に次の値を追加します。 これは、数値自体または値を含む変数のいずれかを使用して実行できます。

$start=10;
var_dump($start+3);

結果は、次の式のsumです。

Output
int
(13)

減算-):最初の値から開始し、前の値から次の値を減算または削除します。

$start=10;
var_dump($start-3);

結果は、この方程式のdifferenceです。

Output
int
(7)

乗算*):最初の値から始めて、次の値を掛けます:

$start=10;
var_dump($start*3);

これは、最初の数値を2番目の数値と同じ回数加算するのと同じです。

$start=10;
var_dump($start+$start+$start);

どちらも同じ結果、方程式のproductを示します。

Output
int
(30)

分割/):2番目の値を最初の値に何回入れることができますか:

$start=10;
var_dump($start/3);

結果は、次の方程式のです。

Output
float
(3.3333333333333)

この場合、3は10に均等に入らないため、結果は整数ではなく浮動小数点数として示されます。 加算することで、結果を整数値として返すようにPHPに指示できます。 (int)、以降はすべて無視されます .:

$start=10;
var_dump((int) $start/3);

結果を整数である整数として与える:

Output
int
(3)

除算式の残りの値または余りが必要な場合、それはモジュロ%):

$start=10;
var_dump($start%3);
var_dump(3%$start);

最初 var_dump 前の除算式の余りを与えます。 方程式を逆にすると、モジュロは 3 10は3にゼロ回入り、元の3を余りとして残すためです。

Output
int
(1) int(3)

モジュロは、奇数行または偶数行に基づいてパターンを作成するときによく使用されます。 行の整数カウントが奇数か偶数かを判断するときは、次を使用します。 %2:

var_dump(10%2);
var_dump(11%2);

偶数は2で割り切れるので、偶数の整数は常に0の結果になりますが、奇数の整数は均等に割り切れないので常に1の結果になります。

Output
int
(0) int(1)

PHPは複雑な計算をすばやく実行でき、必要な計算を作成するためのツールをさらに多く提供します。 指数、パーセンテージ、平方根、およびその他の多くの操作が可能です。 これらの数学関数のいくつかを見る前に、代入演算子と算術演算子を組み合わせた別のタイプの演算子を調べてみましょう。

算術代入演算子

リンゴが10個入ったバスケットがあるとします。 これをコードで表すために、次のように書くことができます $basket = 10. 次に、追加の5つのリンゴを選び、バスケットに入れます。 整数を使用する代わりに 10、の値を使用できます 10 に保存されます $basket 変数: $basket = $basket + 5. これは技術的には正しいですが、かなり冗長です。 既存のバスケットにさらに5個のリンゴを追加したいだけです。 そこで、算術代入演算子が登場します。 変数を繰り返す代わりに、次のように書くことができます $basket += 5. これは前の式とまったく同じように機能します。 コードに次のように指示します。

  1. の値を取る $basket
  2. 追加 5 その値に
  3. 新しい値をに再割り当てします $basket

これと同じ原理を他の算術演算子で使用できます。

表現 結果($ i = 10と仮定)
$i += 5 10+5を追加します。 結果: $i = 15
$i -= 5 10-5を引く; 結果: $i = 5
$i *= 5 10*5を掛けます。 結果: $i = 50
$i /= 5 10/5を割ります。 結果: $i = 2

サミーがバスケットの中のリンゴのいくつかを切り刻むことにした場合、次のようなものを使用できます $basket -= 6、これは整数を残します 9 に割り当てられた $basket. これまでのところ、プログラムは次のようになっています。

$basket = 10;
$basket += 5;
$basket -= 6;
echo $basket;

いつ $basket 最終行にエコーされ、最終値が得られます。

Output
9

サミーは一度にたくさんのリンゴを食べることができるかもしれませんが、私は一度に1つのリンゴしか食べることができません。

インクリメント演算子

数を増やすために 1、PHPは、二重のプラス記号である個別のインクリメント演算子を提供します(++). これは、変数を個別に(独自の行で)インクリメントするため、または式内で直接インクリメントするために使用できます。 アップルバスケットの例に戻りましょう。 $basket 変数は 9:

++$basket;
echo $basket;

最初の行は現在の値(9)に1を加算し、次の行は結果を示します。

Output
10

同じことを1行で行うことができます。

echo ++$basket;

最初に、現在の値(10)に1を加算し、次の行で結果を示します。

Output
11

の値が $basket もう一度出力されます:

echo $basket;

それは、 $basket 変数は、出力結果に追加されただけでなく、前の行で実際に更新されました。

Output
11

前の各行では、変数の前にインクリメント演算子が使用されていました。 この事前にインクリメントされたアクションは、変数などの他のアクションの前に変数に適用されます。 echo 指図。 使用する ++$basket 書くのと同じです $basket += 1. インクリメント演算子は、変数の後にポストインクリメントとして使用することもできます。 変数を個別に設定する場合は順序は関係ありませんが、式内で使用する場合は順序が重要になります。 同じ行を繰り返しましょう。今回は、変数の後にインクリメント演算子を置きます。

$basket++;
echo $basket;

最初の行は現在の値(11)に1を加算し、次の行は結果を示します。 これは、前の例のプリインクリメントラインとまったく同じように機能します。

Output
12

ここで、ポストインクリメントされた値との違いに到達します。

echo $basket++;

The echo 値がインクリメントされる前にアクションが発生するため、2番目の結果 echo まだの値を示しています $basket 1増加する前。

Output
12

決勝 echo コマンドは、変数が実際にインクリメントされた後に echo 処理されました:

echo $basket;

の最終的な値を示す $basket:

Output
13

インクリメント演算子に加えて、PHPは値を次のように減らす機能を提供します 1 デクリメント演算子を使用します。

デクリメント演算子

値を減らすには 1、二重マイナス記号であるデクリメント演算子を使用できます(--). インクリメント演算子と同様に、この演算子は変数の前または後に追加できますが、位置はプログラムの出力に影響を与える可能性があります。

echo --$basket; # Pre-decrement
echo $basket--; # Post-decrement
echo $basket;

最初の行は削除されます 1 13であった現在の値から echo コマンドが実行されます。 次の行は echo ポストデクリメント演算子が評価される前のコマンドで、出力は同じままにします。 もう一度、決勝 echo の値が $basket 前の行で実際にデクリメントされ、値が減少しました。

Output
12 12 11

演算子の優先順位が結果でどのように重要な役割を果たすかを検討するときは、演算子のこの順序を覚えておいてください。

演算子の優先順位

演算子のprecedenceは、2つの式を「緊密に」バインドする方法を指定します。 これは、「操作の順序」と呼ばれることがよくあります。 これは、さまざまな演算子がより重要になり、最初に適用されることを意味します。 数式を評価する場合、乗算と除算は常に加算と減算の前に実行されます。 例えば:

echo 1 + 5 * 3;

この式では、乗算(*)演算子は加算よりも優先順位が高くなります(+)演算子であるため、最初に評価されます。 5 * 3 = 15. その後、加算は次のように実行されます。 1 + 15 = 16. これにより、次の最終結果が得られます。 16:

Output
16

操作の順序に従わなかった場合は、 1 + 5 最初に評価され、次にその結果に乗算が適用され、次のようになります。 6 * 3 = 18.

インクリメント演算子とデクリメント演算子は数値に適用できません。 それらは変数とともに使用されます。 ただし、その値をインクリメントまたはデクリメントする方程式に変数を追加することはできます。 これらのインクリメントまたはデクリメントされた変数が使用される場合、方程式はインクリメントまたはデクリメント操作の前または後に実行されます。

$my_num = 8;
echo 7 + $my_num++ + 9;
echo $my_num;
echo 7 + --$my_num + 9;
echo $my_num;

最初に echo 行、数式はの元の値を使用して実行されます $my_num ポストインクリメント演算子が値を増やす前。 まるで書いたかのようです echo 7 + 8 + 9;、これにより、 24. 2番目から見る echo それ $my_num これで9に設定されます。 2番目の数式は、事前デクリメント操作の後に実行されます。つまり、 $my_num は8に設定され、数式自体は同じです。 数式が実行された後、ポストデクリメント演算子が実行され、最終結果が得られます。 $my_num 変数:

Output
24 9 24 8

グループ化操作

括弧は常に最高レベルの優先順位を持ち、操作をグループ化したり、優先順位を強制したりする方法を提供します。 たとえば、前の式に括弧を追加します。

echo (1 + 5) * 3;

括弧内の項目は乗算の前に評価されるため、結果は異なります。

Output
18

数式の演算子の優先順位を要約すると、次のようになります。

  1. 括弧は左から右に評価されます。
  2. 乗算と除算は左から右に評価されます。
  3. 最終結果は、左から右への加算と減算を使用して評価されます。

タイプジャグリング

PHPは、変数が宣言または設定されるときに変数タイプを定義しません。 代わりに、変数のタイプは、変数が使用されるコンテキストによって決定されます。 使用できます var_dump() タイプを含む変数の詳細を表示するには、次のようにします。

$my_var = 'string';
var_dump($my_var);
$my_var = 1;
var_dump($my_var);

文字列値が変数に割り当てられると、その変数は文字列になります。 次に、同じ変数に整数値が割り当てられると、整数になります。

Output
string
(6) "string" int(1)

PHPは、方程式の評価に基づいてタイプも設定します。

$var1 = 1.2;
$var2 = 2;
$var3 = 12;
var_dump($var1 * $var2);
var_dump($var3 * $var2);
var_dump($var1, $var2, $var3);

どちらかのオペランドがfloatの場合、両方のオペランドがfloatとして評価され、最初のオペランドに示すように、結果はfloatになります。 var_dump. それ以外の場合、オペランドは整数として解釈され、結果も整数になります。 var_dump:

Output
float
(2.4) int(24) float(1.2) int(2) int(12)

3番目から var_dump これにより、オペランド自体のタイプが変更されないことがわかります。 唯一の変更点は、オペランドの評価方法と、結果として得られる式自体のタイプです。

文字列やブール値などの他のデータ型も数値に変換される場合があります。 これは多くの混乱を引き起こす可能性があるため、避けるのが最善です。 PHPは通知または警告を生成しますが、それでも変数を評価可能な型に「ジャグリング」するために最善を尽くします。 例えば:

表現 結果 タイプジャグリング
2 * false 0 ブール値は整数に変換されます 0
2 * true 2 ブール値は整数に変換されます 1
2 * 'hi' 0 文字列は整数に変換されます 0
2 * '1' 2 文字列は整数に変換されます 1

PHPのタイピングを緩くすると、コードの記述が速く簡単になりますが、問題の追跡が難しくなることがよくあります。 アプリケーションで使用される変数タイプに注意してください。

数学関数

関数は、プログラムで繰り返し使用できるステートメントのブロックです。 PHP comes with many built-in functions that allow us to perform additional math calculations.

正の数と負の数の両方を処理する場合、数値の絶対値を取得できます。 abs 関数:

echo abs(-1.3);

これは無視します + また - 数値の前にあり、数値自体を返します。

Output
1.3

数値で推定する場合、またはfloatの整数値を取得する場合は、複数のオプションがあります。

echo round(1.3);
echo round(1.5);
echo ceil(1.3);
echo floor(1.5);

The round 関数は、最も近い整数を返します。 .5 より高い数に評価します。 The ceil 関数は常に切り上げられますが、 floor 関数は常に切り捨てられます:

Output
1 2 2 1

どの円の比率も同じです。 これは真実であるため、円の円周は、その直径に次のような特別な数値を掛けることによって決定できます。 pi (Π):

echo pi();
echo 4 * pi();

The pi PHPの関数は、の最初の14桁を返します pi、 以来 pi は無理数です。つまり、その10進形式は決して終了しません。 この関数を使用して、直径4の円の円周を計算できます。

Output
3.1415926535898 12.566370614359

コインを投げる場合でも、サイコロを振る場合でも、結果の目標が偶然である場合、ランダムな数字がツールを提供します。 PHPは rand この予測不可能なランダムな結果を返す関数:

echo rand();

この関数は、0から getrandmax マシン上で構成されています。 ランダム性を少し少なくする必要がある場合、または最大数を増やしたい場合は、最小値と最大値を包括的に指定できます。 ランダムな3桁の数字を返すには:

var_dump(rand(100, 999));

毎回これ rand 関数が呼び出されると、100から999までの3桁の数値が返されます。

乱数を返す計算は実際にはランダムではないため、セキュリティと暗号化に関しては、PHPはより暗号的に安全な関数を提供します。 カードのシャッフルや当選番号の抽選などの偏りのない結果に適した暗号化乱数を生成するには、 random_int 関数:

var_dump(random_int(-999, 999));

random_int 包括的最小数と最大数を指定する必要があります。 両方 randrand_int 負の数を受け入れます。

バイト文字列を取ることができるソルト、キー、または初期化ベクトルの暗号的に安全な値を生成する場合は、次を使用します。 random_bytes 指定された文字列の長さ:

var_dump(random_bytes(20));

毎回新しいランダムなバイト文字列を取得します。これは次のようになります。

Output
string
(20) "q8?Ud;??W?p4?C????"

PHPにはさらに多くの組み込み数学関数があります。 詳細については、php.netのドキュメントをご覧ください。

結論

このチュートリアルでは、整数および浮動小数点の数値データ型を操作するときに使用する多くの演算子について説明しました。 また、演算子の優先順位と位置が結果にどのように影響するかを示しました。 これらの結果は、PHPが変数タイプと発生する可能性のある問題を「ジャグリング」する方法に私たちをもたらしました。 最後に、組み込み関数の簡単な紹介により、アプリケーションで利用できる数学的な選択肢が広がりました。 他のデータ型の詳細については、PHPのデータ型についてを参照してください。