Java使いのためのPHP入門(1)~JavaとPHPどちらが簡単か?
「Javaなら何となくできるけど、PHPはやったことない」という人に向けて、PHP入門講座を書いてみました。JavaとPHPについて、文法やプログラミング作法をはじめ、文化的な諸事情までを比較しながら、PHPへの理解を深めていきます。
PHPとは何か?Javaより簡単か?
「JavaみたいなOOP(オブジェクト指向プログラミング)ばりばりのプログラミングができれば、PHPなんか簡単じゃないかなぁ。」というのが、PHP使いがJavaを見た印象かもしれません。PHPを書いている人って、「もともとデザイナーでWebプログラミングをしてみたくてPHPに手を出した」とか、「初めてのプログラミング言語がPHPだった」なんて人が多いのかもしれません。
PHPの一番の魅力は、なんといっても、「OOP何それ?」という人でも書くことができる点にあります。言語の比較として一番引用される「アレ」を表示するプログラムを書いてみます。
Java だと以下のように、Helloクラスを作って、static なmain メソッドで System.out.println() という流れになります。
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
では、PHPは?というと、一行です。
<?php echo “Hello, World!”; ?>
あるいは、以下のように書いても同じ意味です。
Hello, World!
初めて見る人は「え?それだけ?それでもプログラムなの?」と思うかもしれません。PHPとJavaが決定的に違うのが、この部分かもしれません。PHPでは、「<?php」から「?>」までが、PHPプログラムであり、それ以外は、文字列として出力するのと同じ意味になるのです。
Javaがクラス定義から始まるのに際して、PHPはクラス定義やましてプログラムは不要で、「文字出力から書き始める」という点が大きな違いです。
生まれも育ちもLLなPHP
そもそも、PHPはプログラミング言語として生まれたのではなく、HTMLを手軽に出力するためのテンプレートエンジンとして生まれたのです。PHPの生まれはこうです。
これだけ見ても、Javaの生い立ちとは、かなり隔たりがありますね。Javaは、世界的企業の Sun が1990年に社内プロジェクトで開発をはじめ、オブジェクト指向、ガーベッジコレクション、など数々の最先端技術を誇示しながら登場しました。
このように、Javaが企業のプロジェクトから始まったのと比較して、PHPは個人がこつこつ作っていたプロジェクトが大ヒットしたものといえます。そういえば、日本初のRubyも、まつもとひろゆきさんが個人的に作ったものですし、PerlもLarry Wall氏が作ったものです。ですから、軽量プログラミング言語(LL)系の言語は、カリスマプログラマーによって作られて広まるというのが王道なのかもしれません。
カメとウサギどちらが早いか?
ちょっと話がそれましたが、ほかに大きな、PHPとJavaの違いを挙げるなら、コンパイラ言語とインタプリタ言語の違いを挙げることができます。
Javaは、JVMのバイトコードにコンパイルされてから実行されますが、PHPではインタプリタ方式を採用しており、コンパイルされることなく実行されます。
ですから、当然、実行速度自体は、Javaの圧倒的勝利となります。しかし、Webアプリケーションの実行時間のほとんどが、データベースアクセスに消費されることを考えると、多少の実行速度の差は気にならないというのが、一般的な見方です。
Webアプリケーションの開発案件で言語や技術を選択する場合には、実行速度よりも、開発速度や開発効率・メンテナンス性が重視されます。そうなると、状況によっては、コンパイラ言語のJavaよりも、インタプリタ言語のPHPの方が「手軽にプログラムできて良い」という場合が出てきます。
Java使いがもっとも勘違いするPHPの文法
それから、Javaプログラマーの方が、あまりPHPの文法について調べないうちから書き始めた時にハマる「ローカル変数の扱い」についても言及しておきます。まず、以下のPHPプログラムを見てください。(ちなみに、「<?php」に対応する閉じタグの「?>」は省略が可能です。書き忘れではありません!)
<?php
$value = 5;
function hoge()
{
$value += 3;
}
hoge();
echo $value;
さて、上記のプログラムの実行結果を予想してみてください。答えは何ですか?「8」だと思った方は、不正解です。答えは、5のままです。Perl なら、似たプログラムを書くと、8になるのですが、PHPでは、関数スコープの中で使われる変数は、関数外スコープの変数とは違うものと認識されます。
どうしても、関数内と関数外のスコープで同じ変数を使う場合には、明示的に変数を「global」宣言する必要があります。以下のように、global $value と明示することで、$value をグローバル変数として利用することができます。
<?php
$value = 5;
function hoge()
{
global $value;
$value += 3;
}
hoge();
echo $value;
次回予告
以上、今回は、簡単にPHPとJavaの表面的な違いについて軽く言及してみました。次回は、実際にJavaとPHPの開発環境の違いについて紹介してみたいと思います。
TrackBack URL :
