0

ドライバーを作成しようとしていますが、いくつかのメソッドがサブクラスで共有されています。そのメソッドを親クラスに実装したい。

public/protected に設定された各妥当性または機能は、子クラスからアクセスできる可能性があることをここで読みました。

そのため、親クラスで保護としてDriver_name設定method_oneし、エラー ログでアクセスしようとすると、Driver_name_subclass_one「そのようなメソッド 'method_one' はありません」と表示されます。

私は何を間違っていますか?

4

2 に答える 2

3

メソッドを公開しておく必要があります。ドライバーは、 などの標準のクラス継承を使用しませんclass Cache_dummy extends Cache。代わりに、リフレクションを使用して親からパブリック メソッドを検索し、マジック メソッドを使用して個々のドライバーがそれらを使用できるようにします__call()

これが CI でどのように行われるかのスニペットはsystem/libraries/Driver.phpCI_Driverクラスの 136 行付近にあります。

$r = new ReflectionObject($parent);

foreach ($r->getMethods() as $method)
{
    if ($method->isPublic())
    {
        $this->methods[] = $method->getName();
    }
}

同じことが、親のプロパティにも当てはまります。たとえば、$CIそれらを公開しておくか、サブドライバーによって「継承」できません。

于 2013-04-20T00:09:00.017 に答える