php5学習メモ(2)

WBOY
リリース: 2016-06-13 13:17:38
オリジナル
1147 人が閲覧しました

php5学習記録(2)

1. 過負荷パフォーマンス

1. 属性とメソッドのオーバーロード

php では、特別なプロキシ メソッドを実装することで、プロパティ アクセスとメソッド呼び出しのオーバーロードが可能になり、関連するプロパティまたはメソッドが存在しない場合にこれらのプロキシ メソッドが呼び出されます。この機能により、これらのアクションを仲介し、独自の機能を定義する際に非常に柔軟な対応が可能になります。

次のメソッド プロトタイプを実装できます:

function __get($property) // プロパティの名前を渡し、プロパティの値を返します

function __set($property, $value) // プロパティ名と新しい値を渡します

function __call($method, $args) // メソッドの名前と数値インデックスの配列を渡します。数値には、渡されたパラメーターのインデックスが含まれます。最初のパラメータは 0 です。

?

?

class Users {
    
    private $arr = array();

    function __get($name) {
        return $this->arr[$name] === NULL ? 'null' : $this->arr[$name];
    }

    function __set($name, $value) {
        $this->arr[$name] = $value;
    }

}

$user = new Users();
$user->a = 'xiezheng';
print $user->a;
ログイン後にコピー

__call() は、主にオブジェクト内の他のメソッドを監視するために使用されます。オブジェクトに存在しないメソッドを呼び出そうとすると、__call メソッドが自動的に呼び出されます。

?

class HelloWorld {
    function display($count) {
        for($i=0; $i<$count; $i++)
            print __CLASS__.'<br />';
        return $count;
    }
}

class HelloWorldCall {
    private $obj;
    function __construct() {
        $this->obj = new HelloWorld();
    }

    function __call($method, $args) {
        return call_user_func_array(array($this->obj, $method), $args);
    }
}

$hwc = new HelloWorldCall();
print $hwc->display(3);
ログイン後にコピー
?

?

2. 配列ステートメントアクセスを使用したオーバーロード。

クラスで配列ステートメントへのアクセスをオーバーロードするには、クラスで ArrayAccess インターフェイスを実装する必要があります。

bool offsetExists($index)

マイニングされた offsetGet($index)

void offsetSet($index, $new_value)

void offsetUnset($index)

上記は ArrayAccess が実装する必要があるメソッドです。

?

?

class Users implements ArrayAccess {
    
    private $uname;

    function offsetExists($name) {
        return $this->uname === NULL;
    }

    function offsetGet($name) {
        return $this->offsetExists($this->uname) ? 'NULL' : $this->uname;
    }

    function offsetSet($name, $value) {
        $this->uname = $value;
    }

    function offsetUnset($name) {
        $this->uname = null;
    }

}

$user = new Users();
$user['name'] = 'xiezheng';
// unset($user['name']);
print $user['name'];
ログイン後にコピー
?

?

?

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート