Re: [RFC][VOTE] Allow specifying keys in list()

From: 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]

« previous php.internals (#91226) next »