サンプル集  >  PHP  >  null判定、日付の表示
null判定、日付の表示
2008/07/03

今の環境では簡単なバッチ処理などはphpで行っています。 javaだとデプロイが面倒ですが、phpは置くだけで動くのでjavaに比べて、フットワークが軽いイメージがあります。 最初はなんかスクリプトの延長のお手軽言語的なイメージでしたが、侮る無かれ、色々できそうです。

◆環境
OS Windows XP Professional Version 2002 Service Pack 2
PHP 5.2.4

null判定

is_null()という関数を見かけました。 phpでは==nullでnull判定できないのかな?と思い試してみました。

php001.php
1: 
2: 
3: 
4: 
5: 
6: 
7: 
<?php
    if($argv[1]==null) {
        echo "argv[1] is null";
    }else{
        echo "argv[1]=[".$argv[1]."]";
    }
?>

◆実行結果
>php php001.php
argv[1] is null
>php php001.php aaa
argv[1]=[aaa]

==nullでもnull判定ができました。 is_null()に変えて試してみます。

php002.php
1: 
2: 
3: 
4: 
5: 
6: 
7: 
<?php
    if(is_null($argv[1])) {
        echo "argv[1] is null";
    }else{
        echo "argv[1]=[".$argv[1]."]";
    }
?>

◆実行結果
>php php002.php
argv[1] is null
>php php002.php abc
argv[1]=[abc]

==nullと結果は一緒ですね。 空文字列("")でも同じ挙動でしょうか。

php003.php
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
<?php
    $str="";
    if($str==null) {
        echo "1:is null";
    }else{
        echo "1:[".$argv[1]."]";
    }
    if(is_null($str)) {
        echo "2:is null";
    }else{
        echo "2:[".$argv[1]."]";
    }
?>

◆実行結果
>php php003.php
1:is null2:[]

結果が違いますね。==nullだと空文字列("")も真になりましたが、is_null()だと偽となりました。 ちなみに、出力結果に改行を入れ忘れたため見づらいですね。。。 そういえばechoとprintの違いは何でしょうか。

php004.php
1: 
2: 
3: 
4: 
5: 
6: 
<?php
    echo "echo1";
    echo "echo2";
    print "print1";
    print "print2";
?>

◆実行結果
>php php004.php
echo1echo2print1print2

echoでもprintでも改行は入らないですね。 \nを入れれば改行するので、改行したい場合、行末に\nを付けましょう。

null判定に戻りますが、変数にnullを代入した場合、判定はどうなるのでしょうか。

php005.php
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
<?php
    $str=null;
    if($str==null) {
        echo "1:is null\n";
    }else{
        echo "1:[".$argv[1]."]\n";
    }
    if(is_null($str)) {
        echo "2:is null\n";
    }else{
        echo "2:[".$argv[1]."]\n";
    }
?>

◆実行結果
>php php005.php
1:is null
2:is null

nullを入れた場合はどちらでもnullと判定できるようです。

判定方法指定なしnull空文字列
==null
is_null

空文字列("")は、==nullとis_nullで真偽が違うという結果になりました。

こういう細かい話はバージョンによってこっそり変わったりしそうなので注意が必要ですね。 念のためバージョンを確認します。

>php --version
PHP 5.2.4 (cli) (built: Aug 30 2007 07:06:31)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

日付の表示

現在日時はgetdate()で取得できます。

php006.php
1: 
2: 
3: 
<?php
    echo getdate();
?>

◆実行結果
>php php006.php
Array

Arrayと表示されました。一瞬、意味不明でしたがgetdateの返却値はArrayってことですね。

php007.php
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
<?php
    $today=getdate();
    echo $today[year]
    ."-".$today[mon]
    ."-".$today[mday]
    ." ".$today[hours]
    .":".$today[minutes]
    .":".$today[seconds];
?>

◆実行結果
>php php007.php
2008-7-2 15:40:10

sprintfで0詰めして桁数を整えます。

php008.php
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
<?php
    $today=getdate();
    echo sprintf("%04d",$today[year])   ."-"
        .sprintf("%02d",$today[mon])    ."-"
        .sprintf("%02d",$today[mday])   ." "
        .sprintf("%02d",$today[hours])  .":"
        .sprintf("%02d",$today[minutes]).":"
        .sprintf("%02d",$today[seconds]);
?>

◆実行結果
>php php008.php
2008-07-02 15:43:53

きれいに表示されました。

▲ PageTop  ■ Home


Copyright (C) 2013 ymlib.com