カテゴリー: PHP

  • 【PHP】!empty()とisset()関数の違い

    PHPのサンプルコードを読んでいると、!empty() とisset()関数が頻繁に出てきます。

    !empty()は、emptyの否定であり、 “空ではない”という意味になります。

    他方、isset()は、変数や配列が“セットされている”という意味です。

    この二つは、似たような意味であることから混同して使われているようにも見受けられます。

    そこで、一度、公式マニュアルで確認してみました。

    empty() :

    http://jp2.php.net/manual/ja/function.empty.php

    isset() :

    http://jp2.php.net/manual/ja/function.isset.php

    違いを要約してみます。

    emptyは、0や””の空文字がセットされていても、空と評価します。

    他方、issetは、0や””がセットされていれば、空でないと評価します。

    つまり、emptyとissetで違いが出てくるのは、0や空文字が変数に代入されている場合というわけです。

    マニュアルのサンプルコードを少しいじって検証してみます。

    <?php
    $var = 0;
    
    // $var が0(空)なので条件はfalseと評価されます
    if (!empty($var)) {
    echo 'emptyは0を空と評価しtrue、!の否定によりfalseになり非表示';
    }
     
    
    // $var が設定されているので条件はtrueと評価されます
    if (isset($var)) {
    echo 'issetは0がセットされていると評価しtrueなので表示';
    }
    ?>

    少しややこしいので、挙動に自信が無いときは、わかりやすいissetを使う方が無難といえそうです。

  • 【PHP+MySQL】トランザクション構文の基礎

    PHPとMySQLを連携させてデータベースを扱っていると、トランザクションの処理が必要になることがあります。

    そこで、ここでは、トランザクション構文の基礎を紹介します。

    <?php
    
    (接続部分は省略)
    
    //オートコミットをオフに設定
    $sql = "SET AUTOCOMMIT=0" ;
    mysql_query($sql) ;
    
    //トランザクション開始
    $sql = "BEGIN" ;
    mysql_query($sql) ;
    
    //テーブルに挿入
    $sql = sprintf('INSERT INTO table SET data="%s"' , $data) ;
    $res = mysql_query($sql) or die("insert error") ;
    if ($res) {
    //コミット
    $sql = "COMMIT" ;
    mysql_query($sql) ;
    echo "成功" ;
    } else {
    //ロールバック
    $sql = "ROLLBACK" ;
    mysql_query($sql) ;
    echo "失敗" ;
    }
    ?>

    基本的に、これでトランザクションが機能します。

    注意点としては、データベースの種別に InnoDB などを選択しておくことです。

    デフォルトの MyISAM ではトランザクションを利用することはできません。

    autocommit というのがよくわからなかったので調べてみました。

    InnoDBのデフォルトだとautocommit機能がオンで、commitする前でも、クエリ成功時点で自動的に確定してしまうらしい。

    これだとrollbackできないケースが出てくるので、autocommit機能はオフにした方が良いとのこと。

    ちなみに、CORESERVERのInnoDBを調べたら、オンになっていました。

    (参考)autocommitについて役立つページ

    http://redwarcueid.seesaa.net/article/140085587.html

    http://open-groove.net/mysql/autocommit/

    http://dbinfo.sakura.ne.jp/?contents_id=132

  • PHP技術者認定試験について

    PHP技術者認定初級試験が2011年3月11日からスタートするようです。

    初級が春から、上級が秋からの開催みたいです。

    初級試験概要

    • 受験料:12,000円(税抜き)
    • 問題数:40問
    • 試験時間:1時間
    • 合格ライン:7割正解
    • 主教材:はじめてのPHP5(オライリー)

    上級試験概要

    • 受験料:15,000円(税抜き)
    • 問題数:60問
    • 試験時間:1時間30分
    • 合格ライン:7割正解
    • 主教材:プログラミングPHP第2版(オライリー)

    PHP技術者認定試験の概要はこんな感じです。

    はじめに目がいくのは受験料ですが、少し高い印象を受けます。この半分くらいなら早速、受けてみたいところですが。

    注意したいのは、国家資格ではなく、民間資格という点です。IT関係の資格には、ベンダーが実施する試験など民間資格が多いのですが、このPHP認定試験もそういった種類の資格に分類できると思います。

    実施団体は、

    「特定非営利活動任意団体PHP技術者認定機構」

    なる組織です。いわゆるNPO法人に分類されるのでしょうか。※

    (※ コメント欄でご指摘を受けたように、この組織は、特定非営利法人(NPO)とは異なる任意団体とのことです。訂正してお詫びいたします。)

    当該ページの設立趣旨に次のような記述があります。

    『日本国内の「PHP」技術習得度合いを測る有効な基準がないため、個々のPHP技術者の技量に大きな差が生じています。』

    この文章は少し疑問に思います。なんらかの基準があれば、個々の技術者の技量の差が縮まるのでしょうか。いや、基準があっても差は歴然と存在すると思います。原因と結果の関連がおかしい文章にみえます。

    それはさておき、昨秋に初級のベータ試験が行われていたようで、受験者の体験がブログに載っています。

    弱小PHPerの憂鬱 合格発表 

    初級は、40問中28問の正解で合格なのですね。ただ、重箱の隅的な細かい箇所も出題されるようで微妙な感じも伝わってきます。

    過去問が公開されるのはいつぐらいになるのでしょうか。公開されたら是非、解いてみたいですね。内容が充実していて、実務にも役立つ知識が問われるなら勉強のしがいも出てきます。

    資格商法と揶揄されない、しっかりとした運営を期待したいです。

  • 【書評】つくって覚えるPHP入門

    つくって覚えるPHP入門 オフィス加減(著)の書評です。

    良い点

    • 実践的なミニアプリが4本
    • アプリ作成の学習が楽しめる
    • 図がわかりやすい
    • 簡素で無駄がなく内容が濃い
    • お手軽な薄さ

    悪い点

    • セキュリティが甘い点あり
    • 朱(薄赤)と黒の二色刷り

    総評

    他のPHP入門本に比べて、コンパクトで薄い本です。
    しかし、実践的で、内容が濃いです。

    『つくって覚える』のタイトル通り、アプリを作りながらPHPを学ぶ構成になっています。作成するミニアプリは次の4つ。

    • メールフォーム
    • 画像アップローダー
    • アンケートシステム
    • 会員制掲示板

    どれも手頃な難易度のスクリプトで、PHPの文法書に飽きた初心者にお勧めのサンプルです。

    基礎の復習と応用に向いていて、中級レベルの知識もそこそこ扱われています。

    PHPに慣れている人なら、1つのアプリを1時間弱でこなせるので、4時間あれば読み終えられます。

    開発環境はXAMPPが紹介されています。この導入部分もわかりやすいです。

    データベースはMySQLを利用しています。

    悪い点として挙げた、赤(朱)と黒の二色刷りの点ですが、これは好みによりますね。赤は目が疲れるので、自分的には青と黒の二色刷りが良いのです。

    セキュリティは、この本だけでは不足しているので、他の本でしっかり学ぶ必要があります。この本を読んだらステップアップとして、セキュリティに詳しい本を次に読むことをお勧めします。

    全体的には、解説が丁寧で著者の真摯さが伝わってくる良書だと思います。

    [補足]

    この本には、SSHやTelnetなどの用語がでてきます。これらは、サーバーにログインして、サーバーを操作する方法です。SSH接続するには、TeraTermというフリーソフトがお勧めです。TeraTerm SSH で検索すると使い方が出てくるので目を通すと良いかもしれません。ただ、ここら辺はPHPの本質的な部分ではないので、わからなければ、飛ばして読んでもそれほど問題ないと思います。

    ちなみに、自分は、以前、世界でいちばん簡単なUnixのe本 という本を読み、SSHとTeraTermについて学習しました。

    つくって覚えるPHP入門

  • 【書評】パーフェクトPHP

    パーフェクトPHP(技術評論社)の書評です。

    良い点

    • 基礎をプロの視点で掘り下げて解説
    • あやふやになりがちな点をきちんと説明
    • セキュリティの章が秀逸
    • 上質紙を使っている

    悪い点

    • 誤字脱字が所々に散見される
    • 白黒の一色刷り

    総評

    この『パーフェクトPHP』は、PHP中級者以上、もしくは、他言語既習者を読者として想定しています。“はじめに”として、その旨が明記されています。

    構成は、パート1~6(全14章)と付録で構成されています。

    ぜひ読んでおきたいのが、パート4のセキュリティの部分です。約90ページほどかけて、WEBアプリケーションのセキュリティについて解説しています。

    このセキュリティのパートは、他のPHP本と比べても特に秀逸な出来になっています。
    『説明』→『脆弱性のコード例』→『対応方法』と、良くまとまっています。典型的な16ほどの攻撃パターンを丁寧にわかりやすく解説しています。

    パート2では、140ページほどかけて、基礎的な文法を、中級レベルの視点で解説しています。あやふやな点を明確にして、コーディングの質を高めるプロの姿勢が感じられます。
    最後のパート6では、100ページほどかけて、PHPのリファレンス的な内容になっています。

    この本の肝となるパート3では、実践的なWEBアプリケーションの作成(ミニブログ)に取り組みます。

    ここでは、この本独自のフレームワークを使った開発手法が取られています。フレームワークの本質を学びたい人には、役立つパートだと思います。

    ただ、いわゆるレガシーな昔ながらの手法で手一杯な人には、このパートはハードルが高くなります。

    ——————————————————-

    (補足)

    この本の肝は、基礎の解説、フレームワークの解説、セキュリティの解説の3つにあると思います。

    基礎とセキュリティは、レガシーコード志向にも役立ちますが、フレームワークについては、敷居が高くなってしまいます。興味はあるのですが。

    フレームワークを使った開発は、JavaやRoRなどでの開発経験がないと厳しいのかもしれません。

    PHPでは、フレームワークが乱立している状態で、標準が無いのが、学習意欲を減退させているようにも思います。

    フレームワークを学ぶなら、Rubyを一から習得してRailsを学ぶ方が学習コストが少ないのかもと思ったりもします。

    実際、個人で簡単なPHPスクリプトを組むだけならフレームワークはいらないのですが、やはり、プロとして働く人にはフレームワークの習得は必須なのでしょう。

    パーフェクトPHP