Archives by date

You are browsing the site archives by date.

PHPで無名関数を使ってみる。

Javascriptでおなじみの無名関数をPHPでも使えるみたいだったので遊んでみた。※PHP5.3以上に限る

とりあえずいつもどおり書いてみる。

$a = 'Hello ';
		
$noname = function($a = null) {
	return $a . 'world!!';
};

// 変数を渡さない場合
$res = $noname();
var_dump($res);
↓
string(7) "world!!"

// 変数を渡した場合
$res = $noname($a);
var_dump($res);
↓
string(13) "Hello world!!"

ちょっと感動。
そして下記例のように「use」を用いることで、無名関数の外にあるスコープの変数を無名関数内に渡すことが可能。
ここでは分かりやすく単なる変数で実験。

$a = 'Hello ';
$b = 'my ';

$noname = function($b = null) use ($a) {
	return $a . $b . 'world!!';
};

// 関数実行時に変数を渡さなくても、$aの'Hello 'は内部から使用することができる。
$res = $noname();
var_dump($res);
↓
string(13) "Hello world!!"

// 実行時変数を渡せばもちろん以下の結果になる。
$res = $noname($b);
var_dump($res);
↓
string(16) "Hello my world!!"

これはおもしろい。再帰処理とかコールバックとかいろいろ楽しいことができそうな予感。積極的に使ってみよう。

PHPでlist()関数を使ってみる。

この表現を用いると、複数の変数へ一度に値を代入することが出来る。
例えば以下のような感じ。

$params = array('hoge', 'fuga', 'piyo');

list($param1, $param2, $param3) = $params;

var_dump($param1, $param2, $param3);
↓
string(4) "hoge" string(4) "fuga" string(4) "piyo"

関数で受け取った値を一気に変数へ代入できたりする。1行で(重要)。

protected function func($p1, $p2, $p3) {
	list($get1, $get2, $get3) = func_get_args();
}

ゆうてそんなに使う場面なさそう。笑

PHPで変数を有効な PHPコードとして取得する方法。

めも。

$vars = array(
	'param1' => 'hoge',
	'param2' => 'fuga',
	'param3' => 'piyo'
);

var_export($vars);
↓
array ( 'param1' => 'hoge', 'param2' => 'fuga', 'param3' => 'piyo', )

var_export()は第2引数にtrueを渡すことで、標準出力ではなく文字列を返却してくれる。

$vars = array(
	'param1' => 'hoge',
	'param2' => 'fuga',
	'param3' => 'piyo'
);

$res = var_export($vars, true);

var_dump($res);
↓
string(75) "array ( 'param1' => 'hoge', 'param2' => 'fuga', 'param3' => 'piyo', )"

var_export()で得られる文字列は有効なPHPコードなので、当然そのまま貼り付けても動作してくれる。

PHPでURLを解析してみる。

与えられたURLを解析して、ホスト名やドメイン、IPアドレスなどを取得したい時用。

$url = 'http://example.com/';
$res = parse_url($url);

var_dump($res);
↓
array(3) {
	["scheme"]=>
	string(4) "http"
	["host"]=>
	string(11) "example.com"
	["path"]=>
	string(1) "/"
}

parse_url()を使うとそのURLから特定できる情報を配列で返してくれる。
続けてIPアドレスを取得したい場合は以下の通り。

$ip = gethostbyname($res['host']);
		
var_dump($ip);
↓
string(14) "93.184.216.119"

gethostbyname()に上部で取得したホスト名を渡してやることでIPアドレスに変換してくれる。

以下おまけ。

ドメインを取得する。

$domain = end(explode('.', $res['host']));

var_dump($domain);
↓
string(3) "com"