可変変数を使えば、動的に変数名や関数名を指定できます。 簡単な例だと、下のようなことができます。
$a = 'hello';
${$a} = ' world!'; // $hello = ' world!'; と同義になる
echo $a . $hello; // 'hello world!' と出力される
で、これを使ってconstで指定したクラス定数を動的に読み込みたかったのですが、なかなかうまく行きませんでした。
理由は、そもそもクラス定数であって変数ではないからでしょうか。
とりあえず、constant(定数名)関数を使うことでうまくクラス定数を指定できました。
使用例
なんでこんな記事を書いたかというと、開発環境と本番環境のDBを簡単に接続しわけるクラスを作りたかったからです。 以下のクラスをrequireして、「MyConnections::get_connection(“service”)」と呼べば本番環境に接続したPDOオブジェクトを取得できます。
<?php
/**
* DBに接続するクラス
*/
class MyConnections
{
/** @var 本番環境の設定 */
const SERVICE_DSN = "mysql:host=servicedb; port=3306; dbname=uso_db";
const SERVICE_USERNAME = "uso";
const SERVICE_PASSWORD = "800";
/** @var ローカル開発環境の設定 */
const LOCAL_DSN = "mysql:host=localhost; port=3306; dbname=uso_db;";
const LOCAL_USERNAME = "root";
const LOCAL_PASSWORD = "";
/**
* DBに接続し、PDOオブジェクトを返す
*
* @param string $target 接続先 (service|local)
* @return PDO
*/
public static function get_connections($target)
{
$env = strtoupper($target);
$dsn = constant("self::" . "{$env}_DSN");
$username = constant("self::" . "{$env}_USERNAME");
$password = constant("self::" . "{$env}_PASSWORD");
try {
return new pdo($dsn, $username, $password);
} catch (PDOException $e) {
throw $e;
}
}
}
?>
最近のコメント