PHP4

私はお仕事でPHP(バージョン4)なる言語を使っております。このPHPという代物ですが、計算機の歴史的にはそろばんと最古を争うほどの前時代的言語でして、アインシュタインレベルの頭脳さえあれば誰でも使える言語といえます。

なんとなく適当に書いてみる

PHP4というのは、大体以下のような形となります。

<?php
class Person{
   var $name;
   var $age;
   function Person(&$name, $age){
       $this->name =& $name;
       $this->age = $age;
   }

   function getAge(){
      return $this->age;
   }
   function getName(){
      return $this->name;
   }
   function setName($name){
      $this->name = $name;
   }
}
?>

(PHP5にはありますが、)アクセス修飾子のprivateなどはありません。それから、staticな関数もありません(関数内にstaticな変数を持つことはできる)。コンストラクタはクラス名の関数となります(PHP5ではそうでない記法が標準的)。参照渡しが変態的(PHP5では代入の動きがかなり変わっている)。

といった、長所がありますので、大変重宝しております。

参照渡し

一つ、参照渡しについてお伝えしておきましょう。「PHP4においては」、代入はコピーを意味いたします。cloneということですね。シャローコピーを行います。

<?php
$p = new Person("山田太郎", 23);
$p2 = $p;
$p->setName("山田かまち");
?>

ここで、$p2->getName()の値は、"山田太郎"となります。すなわち、$p2はコピーされた$pであり、$pの値をいじっても、$p2には影響しません。

<?php
$p3 =& $p;
?>

とすれば、$p3は$pの別名となります。

<?php
function abc(&$a){
   ....
}
?>

のように書くと、$aは参照渡しされます。すなわち呼出側の変数の別名となります。

<?php
$names = array("山田", "田中", "佐藤");
$persons = array();
foreach($names as $name){
   $persons[$i++] = new Person($name, 20);;
}
foreach($persons as $person){
   print $person->getName()."\n";
}
?>

とすると、全て「佐藤」が出力されます。当り前といえば当り前なのですが、うかつに参照を使っていると間違ってしまいます。

それでも使える言語

しかし、それでも、うまく書けばきちんとオブジェクト指向できますし、それなりにウェブ周りのライブラリも充実しておりますので、使える言語とはいえるでしょう。スキルがない人でも、なんとなく書くことができる言語といってもよいかも知れません。

Javaで書けとかCで書けと言われると、下手な人はどうしようもなくなりますが、PHPの場合は下手なりに何とか書けてしまうので、ある意味始末に終えないといえるかもしれません。