ssh経由で特定のデバイスに接続するphpクラスがあります。デバイスごとの接続数を制御するロジックを追加したいと思います。これは私のクラスコンストラクターがどのように見えるかです:
public function __construct($hostname, $password, $username = "", $timeout = 10)
{
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/phpseclib');
include_once('Net/SSH2.php');
$this->_hostname = $hostname;
$this->_password = $password;
$this->_username = $username;
} // __construct
私は次のような他のいくつかの投稿を読みました:phpでアプリケーションレベルで変数を保存する方法は?
そして、私は次のことを確認したいと思います:
- 複数のセッションがクラスカウンターを書き込んだり更新したりしようとしているシナリオがあるため、データベースはファイルよりも優れていると思います。
- クラスcontructorとdestructorsは、このタイプのロジックを追加するのに最適な/唯一の場所です。
唯一のことは、現在、アプリに関連付けられたデータベースがないことです。そのため、この「依存関係」を追加するのは嫌いですが、それが最善の方法のようです。コメント/提案があれば、私に知らせてください。
ありがとう。
編集1:
コンストラクターにロジックを追加する際のもう1つの質問は、次のとおりです...次のロジック(擬似コード)があると仮定します。
public function __construct($hostname)
{
if (! ok_to_connect($hostname) )
{
exit;
}
}
public function ok_to_connect($hostname)
{
$filelist = glob($counterslocation.$hostname.'*.tmp');
if ( count($filelist) < 4) {
$handle = fopen($counterslocation.$hostname.rand(1,4).".tmp", "r");
return true;
}
else {
return false;
}
}
すでに4つのアクティブな接続がある場合でも、コンストラクターでexit()を呼び出すと、デストラクタが呼び出されませんか?これは、ok_to_connect()関数が実際にファイルを作成しなかった場合でも、デストラクタが一時ファイルの1つを削除しようとすることを意味します。ok_to_connect()メソッドにクラスのパブリック変数を設定させ、ファイルを削除する前にデストラクタにこれをチェックさせることができると思います。これが最善の方法ですか?