三陸牡蠣復興支援プロジェクト「SAVE SANRIKU OYSTER」



その他(補足)

ここでは、解説し損ねた事柄をまとめてビラーッと解説しちゃって、PHPの基本は終了します。

このページで解説するのは以下のものです。

  • 式・文
  • コメント
  • ブロック
  • PHPタグ
  • エラー
  • 文字化け

式・文

既に何度も、何となく登場している「」ですが、この「式」の定義(意味)は「値を持つもの」です。

そして、この式はPHPによって解釈・計算されるわけですが、この式を計算する事を「式を評価する」と言います。

PHPのスクリプトにおいて「式」に当てはまるものは「変数」、「定数」、「リテラル」、「条件式」、「引数」等、兎に角値を持つものなら何でもかんでもです。また、「new HODE」や「$hode = "HODENASU!!"」も式です。「new HODE」は、オブジェクトを生成するので、そのオブジェクトが値であるため、式と言えます。「$hode = "HODENASU!!"」は、「変数$hode」に「"HODENASU!!"」と言う値を代入し、それを返すので、式と言えます。

同じく、既に何度も、何となく登場している「」ですが、この「文」とは「処理の単位」です。PHPスクリプトは、文が幾つも羅列されたり、制御文となって構成されています。文は、「;(セミコロン)」で終ります。

$hode = "HODENASU!!"」は式だと書きましたが、この式の後ろに「;(セミコロン)」を置いて「$hode = "HODENASU!!";」とすると、これは文になります。そして、このように式の後ろに「;(セミコロン)」を置いて文にしたものを「式文」と言います。

コメント

スクリプトを記述していくと、定義した関数や変数がなんの為のものだったか分からなくなってしまう事があったりします。以前に自分で書いたスクリプトを後で見直した時に、自分で書いたのに意味が解からないなんて事が意外とあるものです。

そんな時の為に、その関数や変数がどういう意味で何のために使うのか等の情報を「コメント」としてスクリプト内に書いておく事が出来ます。そして、スクリプト内の記述をコメントとする事を「コメントアウト」と言います。

このコメントの部分は、PHPで無視され、スクリプトの処理に一切影響を及ばす事はありません。では、コメントアウトの方法を示した以下のサンプルと結果をご覧下さい。

<?php
    // output "HODENASU!!<br />"
    function HODE(){
        echo "HODENASU!!<br />";
    }
    
    HODE();  // call HODE()
    
    echo "<hr />";  // output "<hr />"
    
    /*
    HODE();  // call HODE()
    HODE();  // call HODE()
    HODE();  // call HODE()
    */
    
    echo "<hr />";  # output "<hr />"
    
    HODE(); /* HODE(); */ HODE();
?>
HODENASU!!


HODENASU!! HODENASU!!

コメントには、「//(スラッシュ2つ)」、「/* */(スラッシュ・アステリスク、アステリスク・スラッシュの組)」、「#(シャープ)」の3種類があります。3つはそれぞれ以下の様に機能します。

記述意味
// 記述以降の記述がコメントアウトされる(単行コメント)
/* 記述 */間の記述がコメントアウトされる(複数行コメント)
# 記述以降の記述がコメントアウトされる(単行コメント)

サンプルの結果を見ると、コメントアウトされた部分は無視され、処理されていないのが判ります。

//」と「#」は全く同じ単行コメントですが、「//」を「処理の一時的な無効化」、「#」を「説明文」として使用すると後で見やすいかもしれません。

コメントアウトするとスクリプトの処理に一切影響を及ぼさないと書きましたが、スクリプトはファイルがメモリ上に読み込まれてから処理されるわけなので、非常識な量のコメントを書けば、ファイルの読込には一応それだけ時間が掛かる事にはなります。

ブロック

「制御構造」のページで登場した「if文」等では、「if($hode){ 処理 }」の様に、処理部が「{}(波括弧)」で囲んでありました。しかし、この「{}(波括弧)」は場合によって省略する事も出来ます。省略できるのは、処理が一文(一行ではなく、一文)の場合です。

ブロックというものは「一連の処理を一まとめにしたもの」という意味なので、一文の処理はブロックにする必要がないのです。

しかし、関数定義やクラス定義のブロックは省略出来ません。以下にサンプルと結果を。

<?php
    $hode = true;
    
    if($hode){
        echo "HODENASU!!<br />";
    }else{
        echo "NDA!!<br />";
    }
    
    if($hode)
        echo "HODENASU!!<br />";
    else
        echo "NDA!!<br />";
    
    $i = 0;
    
    while($i < 3)
        echo ++$i, "<br />";
    
    /* [ error... ]
    function hode()
        echo "SYANE!";
    */
?>
HODENASU!!
HODENASU!!
1
2
3

処理が一文だと、ブロックにしてもしなくても同じ様に機能しています。なお、関数の部分はエラーになるのでコメントアウトしました。

PHPタグ

「PHPとは」のページで『PHPスクリプトは「<?php」と「?>」の2つのタグで囲んで記述し、この部分だけがPHPスクリプトとして処理される』と書きましたが、実はこの他にもPHPタグとして使えるものがあります。PHPタグには以下のものがあります。

記述注意・説明
<?php
    スクリプト
?>
当り障りのない記述(推奨)
<?
    スクリプト
?>
XML文書内では、規格上使えない
<?= "HODE" ?> <? echo "HODE"; ?>」の省略形
<script language="php">
    スクリプト
</script>
「language="php"」の記述を間違えたり忘れるとソースがそのまんま送信されてしまう
<%
    スクリプト
%>
「asp_tags」(PHPの設定)の値を「On」にしないと使えない
<%= "HODE"; %> <% echo "HODE"; %>」の省略形

PHPの記法のおさらい

『PHPタグで囲まれた部分だけがPHPスクリプトとして処理される』と書きましたが、これが何を意味するのか、以下のサンプルと結果で示します。

<html>
<body>
<?php
    for($i = 0; $i < 5; $i++){
?>
  <p><?= "HODENASU!!!" ?></p>
<?php
    }
?>
</body>
</html>
HODENASU!!!

HODENASU!!!

HODENASU!!!

HODENASU!!!

HODENASU!!!

ちゃんと機能すんのが?って感じですけど、機能してます。

何故このような結果になったのか?PHPスクリプトを記述したPHPファイルは『PHPタグで囲まれた部分だけがPHPスクリプトとして処理される』ので、PHPタグに囲まれていない所はHTMLとしてそのまま出力されます。PHPタグが出現した時点でPHPはPHPスクリプトであると認識し、PHPスクリプトとして処理されます。そして、PHPタグが閉じられた時点で、「PHPスクリプトの処理は中断」されます。「中断」です。一時停止、“待て”の状態です(ちなみに、家のバカ犬は“待て”はおろか“お手”すら危うい状況です)

サンプルの、「for文」は終了したわけではなく中断しているだけなのです。よって、この不思議なコードは機能するわけです。要するに、PHPの開始タグと終了タグが登場する度に、HTMLモードとPHPモードがころころ切り替わるというイメージです。ちなみに、HTMLソースは以下の様になっています。

<html>
<body>
  <p>HODENASU!!!</p>
  <p>HODENASU!!!</p>
  <p>HODENASU!!!</p>
  <p>HODENASU!!!</p>
  <p>HODENASU!!!</p>
</body>
</html>

エラー

スクリプトを実行してみると、記述時には思いもよらなかったエラーメッセージが表示される事があります。更にそのまま処理が続行されたり、その時点で終了してしまったりします。

PHPでは、何か問題があった場合に、その問題の種類によって各種の「エラー」を発生させ、その発生させた「エラー」の種類による振る舞いをします。 PHPが発生させる「エラー」には主に以下のものがあります。

エラーの種類説明出力発生後
E_ERROR 実行時の重大なエラー
未定義関数の使用等
Fatal error: メッセージ 終了
E_WARNING 実行時の警告
関数へ渡す引数が不正等
Warning: メッセージ 続行
E_PARSE 実行以前の問題
文法ミス等
Parse error: メッセージ 終了
E_NOTICE 実行時の通知
未定義変数の参照等
Notice: メッセージ 続行
E_STRICT 厳格チェックの通知(PHP5) Strict Standards: メッセージ 続行

PHPの設定によっては、発生してもエラーメッセージを出力しないものがあったり、全く何も出力されなかったりします。テスト環境では全部出力するように設定し、実運用サーバでは出力しないように設定しときましょう。なお、PHPの設定方法はセクションを改めて解説します。

また、エラーには、スクリプト内で人為的に発生させるエラーもあります(エラー発生時の振る舞いを定義した関数を用意しておいて、それを「set_error_handler()」関数でエラーハンドラとして設定し、「trigger_error()」関数で任意のユーザエラーを発行すると、設定したエラーハンドラがコールされ処理される)。こちらもセクションを改めて解説します。

文字化け

スクリプト内で日本語を扱うと、いわゆる文字化けを起こす事があります。日本語を扱う場合は、文字化けを起こさないように対処する必要があります。詳しくはこちらのページで解説しています。

燃えた、燃え尽きすたっちゃ。

これで、PHPの基本の解説は終了です。PHPで“何かが出来る”位のレベルにはなったでしょうか。

しかしながら、PHPには1000以上の関数が用意されており、これらを組み合わせていく事で、なんだりかんだり出来るようになるわけです。夢の自家製掲示板だって作れるかもしれません。これからが長いんだねぇ。ちゃんちゃん。

完。

作成日:2004年05月24日 最終更新日:2004年12月27日
【印刷モード風モード で表示】
ホーム > プロジェクトP > PHPの基本 > その他(補足)