オブジェクト指向のインターフェイス

このインターフェイスは、拡張インターフェイスをオブジェクト指向で扱えるようにしたものです。 以下の例では、先ほどの例をオブジェクト指向で書き直したものをごらんいただきます。 この例の出力は、先ほどのものとまったく同じです。 ただ、"Not a valid counter!" と表示されるかわりに PHP の警告が発生します。 これは、変数 $counter_three がオブジェクトでないためです。 この例では、拡張モジュールで定義されている Counter クラスのサブクラスを作成できることも確認できます。 また、カウンタの値がメソッドではなくインスタンス変数で表されることもわかります。

例1 "counter" のオブジェクト指向インターフェイス

<?php
class MyCounter extends Counter
{
    public function 
printCounterInfo() {
        
printf("Counter's name is '%s' and is%s persistent. Its current value is %d.\n",
            
$this->getMeta(COUNTER_META_NAME),
            
$this->getMeta(COUNTER_META_IS_PERSISTENT) ? '' ' not',
            
$this->value);
    }
}

Counter::setCounterClass("MyCounter");
if ((
$counter_one Counter::getNamed("one")) === NULL) {
    
$counter_one = new Counter("one"0COUNTER_FLAG_PERSIST);
}
$counter_one->bumpValue(2); // we aren't allowed to "set" the value directly
$counter_two = new Counter("two"5);
$counter_three Counter::getNamed("three");
$counter_four = new Counter("four"2COUNTER_FLAG_PERSIST COUNTER_FLAG_SAVE COUNTER_FLAG_NO_OVERWRITE);
$counter_four->bumpValue(1);

$counter_one->printCounterInfo();
$counter_two->printCounterInfo();
$counter_three->printCounterInfo();
$counter_four->printCounterInfo();
?>