Javaしか知らない人がPHPでコードを書くためにはじめに流し読みしておくと良いもの その2


「[Javaしか知らない人がPHPでコードを書くためにはじめに流し読みしておくと良いもの その1](http://qiita.com/satopon/items/8268cfcc3c95aa99b233)」の記事の「その2」です。Javaしか知らなかった人が1日でも早くPHPでコードを書けるようになるために。。。

##ほかのファイル内に記述されたクラスの利用

```
root ┰ index.php
     └ hoge.php
```

こんなディレクトリ構成だった場合。

```index.php
<?php
//ここで「hoge.php」ファイルの読み込み
require_once('hoge.php');

$hoge = new Hoge();
$username = $hoge->get_username();

//「hoge太郎」と出力されるはず
echo $username;
```

```hoge.php
<?php
class Hoge
{
	private $username = 'hoge太郎';
	
	public function get_username()
	{
		return $username;
	}
}
```

「require_once」を使用することで指定したパスのファイルを読み込むことができます。「括弧」を付けずに「require_once 'hoge.php';」のように書くこともできます。ほかにも「include」や「_once」のありなしで挙動がそれぞれ若干ことなる類似の関数があります。詳しくは公式リファレンスを参照してください。

◇require_once（公式リファレンス）
[http://php.net/manual/ja/function.require-once.php](http://php.net/manual/ja/function.require-once.php)


##クラスの継承

```extends.php
class Car
{
	public function run()
	{
		return '普通に走る';
	}
	
	protected function back()
	{
		return '後ろ向きに';
	}
}

class Super_Car extends Car
{
	public function fast_run()
	{
		return '早く走る';
	}
	
	public function fast_back()
	{
		//「parent::」で親クラスの関数を呼び出す
		return parent::back().$this->fast_run();
	}
}

$super_car = new Super_Car();
//「普通に走る」と出力されるはず
echo $super_car->run();
//「早く走る」と出力されるはず
echo $super_car->fast_run();
//「後ろ向きに早く走る」と出力されるはず
echo $super_car->fast_back();
```

クラスの継承の仕方はJavaと同じです。ただし、親クラスの関数（スーパークラスのメソッド）を使用する場合は「super.」ではなく「parent::」と書きます。

◇extends（公式リファレンス）
http://php.net/manual/ja/keyword.extends.php
◇親クラス（公式リファレンス）
http://php.net/manual/ja/keyword.parent.php

###文字列演算子
「extends.php」の「fast_back」関数で文字列演算子（文字列の結合）を使用しました。Javaでは通常「+」を使用しますが、PHPでは「.」を使用して文字列を結合します。

◇文字列演算子（公式リファレンス）
http://php.net/manual/ja/language.operators.string.php

##リファレンス渡し
自ら使用するかどうかは別として、他人のコードを読んでいて出会ったときに動きを把握するために紹介しておきます。

```references.php
<?php
function hoge(&$var)
{
    $var++;
}

$a = 5;
hoge($a);
//「6」と出力されるはず
echo $a;
```

「\$var」の前に付いている「&」に注目してください。これはリファレンス記号と呼ばれるものです。詳細な説明は公式リファレンスに委ねます。

◇リファレンス渡し（公式リファレンス）
http://php.net/manual/ja/language.references.pass.php

##クラスライブラリ（定義済み関数）
```strlen.php
<?php
$hoge = 'ほげほげほげ';
//Javaの場合
//  String hoge = "ほげほげほげ";
//  int len = hoge.length();
$len = strlen($hoge);
//「6」と出力されるはず
echo $len;

```
Javaではよく使う機能をまとめたクラスライブラリというものがありますね。PHPも事前に用意された多数の便利な関数があります。上記の例では「strlen」がその関数です。このようにただその関数を記述するだけですぐに使用できます。

◇strlen（公式リファレンス）
http://php.net/manual/ja/function.strlen.php

###エラー制御演算子（@）
関数の前に「@」を付けることでその関数が出力するエラーメッセージを無視することができます。

◇エラー制御演算子（公式リファレンス）
http://php.net/manual/ja/language.operators.errorcontrol.php

##「==」の挙動
Java同様PHPでも変数の値を比較するときには「==」を使用します。このときPHPでは相互に型の変換を行って変数を比較します。型の変換を行ってほしくないときは「===」を使用して厳密に比較します。

```compare.php
<?php
//「$foo」にはintegerで「1」で設定したつもり
$foo = 1;
//「$bar」にはstringで「1」で設定したつもり
$bar = '1';

//「$result_loose」は「true」のはず
$result_loose = $foo == $bar;

//「$result_strict」は型が異なるので「false」のはず
$result_strict = $foo === $bar;
```

◇比較演算子（公式リファレンス）
http://php.net/manual/ja/language.operators.comparison.php

PHPでは変数を定義するときに型の指定を行わない（できない）ので、好き勝手に変数に値を放り込むことができて楽な反面、このように比較の際に思わぬところでハマってしまうことがあるので注意が必要です。この項直接関係ありませんが、以下のリンクも事前目を通しておくことをお勧めします。

◇PHP 型の比較表（公式リファレンス）
http://php.net/manual/ja/types.comparisons.php

--
以上です。

タイトルにもある通り、Javaしか知らない人がPHPに初めて挑むときのためにこの記事を書きました。実際、自分がJavaしか知らない、かつ、プログラミングの経験が浅いときにPHPの現場に放り込まれたときに、「JavaをベースにしたPHPの簡単なまとめがあればいいな」と思っていました。あとはほかの人が書いたコードを読むときの助けになれば、という思いもあります。PHPほどリファレンスが充実していても、初めて過ぎると調べにくいこともありますしね。

自分自身はプログラマーとしてまだまだひよっこで、わからないことも多く誤解を与えてしまい兼ねないので、詳細には立ち入っていません。詳細はリンク先の公式リファレンスを読んで理解を深めていただければと思います。