面白イコトスル面倒ナコトナクス

①面白いことをする。②面倒なことなくす

PHP初心者の、困った間違えた 2選

f:id:avocado0142:20170715224700p:plain

 

 C、VBプログラムから、最近WEB系(PHP,javascript,html)のプログラムを作るようになりました。開発する中で困ったことを載せていこうと思います。

1.スコープが変。(function内でfunction外定義の変数が使えない)

 Cとかでプログラムの頭で定義した関数はグローバル変数のような扱いになりますが、それができません。

<解決策>

  • functionで値渡しをする。
  • function内でgrobal定義する。

  PHP: 変数のスコープ - Manual

<?php
$a 
1;
$b 2;

function 
Sum() 
{
    global 
$a$b;

    
$b $a $b;


Sum();
echo 
$b;
?>

  • function内でgrobal呼び出しする

<?php
$a 
1;
$b 2;

function 
Sum() 
{
    
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];


Sum();
echo 
$b;
?>

2.少数点計算floatだと、結果がおかしくなるときがある。

 小数点計算はBC Math関数にやらせないと、結果がおかしなことに。→ たとえば、floor((0.1+0.7)*10)は8にならず、7.999991とかになってしまう。

PHP: 浮動小数点数 - Manual

 浮動小数点数の精度は有限です。 システムに依存しますが、PHP は通常 IEEE 754 倍精度フォーマットを使います。 この形式は、1.11e-16 のオーダーでの丸め処理で誤差が発生します。 複雑な算術演算をすると、誤差はさらに大きくなるでしょう。そしてもちろん、 いくつかの演算を組み合わせる場合にも誤差を考慮しなければなりません。

<解決策>

  • BC_Math関数を使うのが適切らしい。

 

  プログラミングは体系的に学ぶより、トライアンドエラーを繰り返す方が、習得が早いと思っています。やってはいけない文法を頭に叩き込むようにしていきましょう。