3

私はこのようなことをしたい:

class StrangeClass {

    public function somethingLikeAMethod($var) {
        /* ... */
    }

    public function awesomeTest() {
        /* ... */
    }

}

$obj = new StrangeClass;
$ex1 = $obj->somethingLikeAMethod(1);

$ex2 = $obj->somethingLikeAMethod(2);

$ex1 -> awesomeTest(); // This will output "1"
$ex2 -> awesomeTest(); // This will output "2"

つまり、そのオブジェクトの動作を変更してほしいのです。

Lua言語では、「metatables」を使用してこれを作成できますが、OO-PHPでこれを作成する方法がわかりません。ありがとうございました。

追加した:

私はLuaでこのようなことをしました:

local query = Database.query(...) -- now this variable has a query id
local query2 = Database.query(...) -- this is a other query id

local result = query.fetchAssoc() -- read below
local result2 = query.fetchAssoc() -- I called the same object with same method twice, but it will return other results

追加#2:

私がやりたいこと:

$db = new Database();

$firstResult = $db->query('SELECT * FROM `table`')->fetch_assoc();
$firstExample = $db->query("SELECT * FROM `table` WHERE `id` = '1'");
$secondExample = $db->query("SELECT * FROM `table` WHERE `id` = '2'");

$secondResult = $firstExample -> fetch_assoc();
$thirdResult = $secondExample -> fetch_assoc();
4

1 に答える 1

8

神はあなたがそれを望む理由を知っていますが、これはあなたのために働くでしょう:

class StrangeClass {

    public function somethingLikeAMethod($var) {
        $this->test_var = $var;
        return clone $this;
    }

    public function awesomeTest() {
        echo $this->test_var;
    }

}

$obj = new StrangeClass;
$ex1 = $obj->somethingLikeAMethod(1);

$ex2 = $obj->somethingLikeAMethod(2);

$ex1->awesomeTest(); // This will output "1"
$ex2->awesomeTest(); // This will output "2"

編集:キューイングシステムを探している場合は、次のように各クエリを配列にプッシュできます。

class StrangeClass {

    private $queries = array();

    public function somethingLikeAMethod($var) {
        $this->queries[] = $var;
        return $this;
    }

    public function awesomeTest() {
        if(count($this->queries) === 0){
            echo 'no queries left';
        }
        echo $this->queries[0];
        array_splice($this->queries,0,1);
    }

}

$obj = new StrangeClass;
$ex1 = $obj->somethingLikeAMethod("select * from hello");
$ex2 = $obj->somethingLikeAMethod("select * from me");
$ex2 = $obj->somethingLikeAMethod("select * from you");
$ex2 = $obj->somethingLikeAMethod("select * from my_friend");

$ex1->awesomeTest();
$ex2->awesomeTest();
$ex2->awesomeTest();
$ex2->awesomeTest();
$ex2->awesomeTest();
于 2012-12-17T16:48:44.890 に答える