I want to do something like this:
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"
Other words, I want that object change its behavior.
In Lua language I can make this with 'metatables', but I doesn't know how to make this in OO-PHP. Thank you.
I did something like this in 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
What I want to do:
$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();
God knows why you want it, but this will work for you:
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"
Edit: If you're looking for a queuing system, you can push each query into an array, something like:
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With