CodeIgniter のパターンはシングルトンです。phpUri は静的呼び出しを使用します。それらの間には大きな違いがあるので、よく知っておくことをお勧めします。
ここでのポイントは、オブジェクト自体ではなく、クラスから要求されphpUri
た静的呼び出しparse
を使用することです。CodeIgniter はシングルトンであるため、サブオブジェクトを持つオブジェクトです (簡単にするために、それについてもっと読んでください)。そうは言っても、これが機能しない理由はphpUri
、オブジェクトのように動作せず、静的呼び出しの後にのみオブジェクトを生成 (返す) ためです。
$href = phpUri::parse($target_url)->join($href);
次のように簡略化できます。
$parsed = phpUri::parse($target_url);
$href = $parsed->join($href);
最初の行は、オブジェクトを$parsed
変数に返す静的呼び出しであり、それで遊ぶことができます。
シングルトンでは、クラスをオブジェクト属性として定義して「クラスの親」を作成することはできません。そのため、このライブラリを使用するには、最初にすべての静的呼び出しを書き直す必要があります。
しかし、オブジェクトの非静的メソッドで静的呼び出しを使用する CodeIgniter で抽象化レイヤー ライブラリを作成する方がはるかに簡単です。
class MyPhpUri {
function parse($target_url) {
return phpUri::parse($target_url);
}
}
次に、ライブラリで
$CI =& get_instance();
$CI->load->library('MyPhpUri');
$href = $CI->myphpuri->parse($target_url)->join($var);
それが抽象クラスです - インターフェイスを提供するクラスです。