Re: [RFC][VOTE] Allow specifying keys in list()
| From: | Rowan Collins | Date: | Fri, 12 Feb 2016 16:14:42 +0000 |
| Subject: | Re: [RFC][VOTE] Allow specifying keys in list() | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-91226@lists.php.net to get a copy of this message | ||
S.A.N wrote on 12/02/2016 15:21:
It's not just a matter of taste, the object is always passed by reference, an array is copied when you change, object literal syntax like JSON, sorely lacking in PHP.Objects are passed by *pointer*, because they're expected to have methods that mutate their state in place. An object with arbitrary keys is unlikely to have any such methods, so I still don't really see the point: if you want to manipulate an array in place, put an & in your function signature. If you actually want an object that contains arbitrary data, just have a single property called $data with the array in; that way, you can have "real" (declared) properties alongside, e.g. class CacheItem {
private $data = [];
private $last_updated;
public function __construct($data) {
$this->data = $data;
$this->last_updated = time();
}
}
You could even implement __get and __set so that the keys of $data were exposed as though they were public properties.
stdClass has always seemed completely pointless to me, because it doesn't provide any encapsulation, and making a "real" object (i.e. a declared class, with declared properties) is so easy, and so much more powerful.
That's why I call it a matter of taste: if I want a hash, I'll use an array, which is already full-featured; if I want an object, I'll define a class for it and use at least some OO principles.
Regards,
--
Rowan Collins
[IMSoP]