伊藤くんの開発メモ
Amebaでブログを始めよう!

PHPにおける@(アットマーク)の意味

ひさしぶりの更新です。
(これから頑張ります)

時々、PHPのソースをみていると、
関数などの前に@(アットマーク)を使用している時があります。

これはエラー制御演算子といって、
エラーがあってもエラーメッセージを出力させないようにするものです。

PHP 5では…


$ito = $_GET["ito"];

という書き方をすると、
エラーが出ることがあるので(原因は不明らしい)、
そんな時には…

@$ito = $_GET["ito"];

と書けば回避できます。

他にも、エラー判定が返り値で判断できるものは、
エラー制御演算子を使用したほうがいいかもしれません。


PHPerな方には常識かもしれませんが、
まだまだビギナーなもので。。。


参考WEB:
PHPでの@(アットマーク)の意味
PHPの疑問~変数前の@(アットマーク)~

filter_var関数とRFC規約違反アドレス

filter_var関数は、

$result = filter_var($address, FILTER_VALIDATE_EMAIL));

というようなシンプルな書き方でメールのフォーマットチェックを行ってくれるのですが、
RFC規約違反アドレス(ドットが連続使用されたアドレス等)に対しては、
FALSEを返すようです。なんてお利口!

ただ!

RFCという世界的な基準の規約に違反しているとは言え、
日本、特にケータイの世界において、
RFC規約違反のアドレスはまだまだ現役なので、
個人的にはメールフォーマットチェックは、
filter_var関数使用しないほうがいいんじゃないかなーと思います。

ちなみに、このRFC規約違反のアドレスは日本のケータイ市場で数年前問題になったようですが、
現在は新規でダブルドット等のアドレスを取得することは各キャリアともに出来なくなりました。

このような状況と、filter_var関数がPHP5.2以降に正式に登場したことを考えると、
filter_varがRFC規約違反をはじくというのは至極真っ当なことだと思います。

何が言いたいかというと、悪いのはfilter_varじゃないよってことです!
(filter_var自体はURLのチェック等も行ってくれるとっても素敵な関数なので)

JavaScriptでのIE判別

たまにはクライアント側の話でも。

JavaScriptでIEかどうかを判断するのは1行で出来ちゃいます。


<!-- IE判別 -->
<script type="text/javascript">
 var isMSIE = /*@cc_on!@*/false;
 if (isMSIE) {
     /*

     IE用の処理
     */
 } else {
     /*

     非IE用の処理
     */
 }
</script>


というように、
var isMSIE = /*@cc_on!@*/false;
だけで実装出来ます。

もちろん、クロスブラウザの観点からひとつの処理系でまとめることがベストですが、
JavaSriptの敵であるIE6に対応させるためには一筋縄では行かない場合もあるので、
思い切って、IE用の処理と非IE処理を書いた方が手っ取り早くベターなケースもあると思います。

auto_incrementでゼロ埋めしたい

MySQLのauto_incrementを利用したすると、1から通番が振られます。
IDの利用等で、桁併せをしたい時等、0埋めをしたくなります。
こんな時は、テーブルのカラム属性に、「zerofill」を指定することで実現出来ます。

設定は、こんな感じ!
alter table animals change id id int(3) unsigned zerofill auto_increment;


MySQL小ネタ①

ドリームジャンボ宝くじの当選番号が発表されました。
僕はなんと…外れてしまいました。

やっぱり世の中そんなに甘くないみたい…。
また一からコツコツと頑張っていきます。

一からコツコツと言えば(強引)、
MySQLでは整数のデータ型が定義されているカラムに対して、
auto_increment属性を指定することが出来ます。

こいつは(デフォルトでは)1からコツコツと勝手に採番してくれるので、
とても便利ですが、ID系カラムのような明らかにマイナス値を必要としない場合、
さらにunsigned属性を設定すると、正数値だけを取得するようになり、
実質、扱える数が2倍になります。

例えば、int型は通常、-2147483648から2147483647までの範囲を扱いますが、
unsigned属性を使用すると、0から4294967295までの範囲を扱うことになります。
超ざっくり言うと、扱えるIDが20億から40億に増える!


大規模なサイトのID系カラムには、
auto_incrementと共にunsigned属性も、
忘れずに設定しておきたいですね。

※1点、MySQL5.0以降の場合、unsigned属性を設定した状態で、
0から1を引くと、4294967295になるので注意が必要です。