[Phpmyadmin-devel] Clarification on Design of PMA_RecentFavoriteTable Class
Edward Cheng
c4150221 at gmail.com
Sat Apr 19 07:10:59 CEST 2014
Hi, Chanaka
2014-04-19 0:32 GMT+08:00 Chanaka Dharmarathna <pe.chanaka.ck at gmail.com>:
> Hi Edward,
>
> On Fri, Apr 18, 2014 at 6:26 AM, Edward Cheng <c4150221 at gmail.com> wrote:
>>
>> Hi, Chanaka Dharmarathna,
>>
>> I'm sorry code I provided have problems,
>> see sample blow, I fixed them
>> <pre>
>> <?php
>> header("Content-type:text/plain");
>>
>> class Sample
>> {
>>
>> private $selfData;
>> private $selfType;
>>
>> private static $_instance;
>>
>> public static function getInstance($type)
>> {
>> if (is_null(self::$_instance)) {
>> self::$_instance[$type] = new Sample($type);
>> } else {
>> if (! array_key_exists($type, self::$_instance)) {
>> self::$_instance[$type] = new Sample($type);
>> }
>> }
>> return self::$_instance[$type];
>> }
>
>
> Nice try.
> This logic seems to be fine, since there are only two new objects are
> creating. shall we do following things to the current code.
>
> 1. Modify $_instance name to $_instances (or better; $_instanceArray ? )
> 2. Initialize it to empty array so that developers will not confuse.
> (normally singleton pattern keep single instance, but here it's array)
> 3. Apply above logic. (instead null check use array empty check since step
> 2)
Using is_null() is ok, because logic is "Var exist but empty, now function
is going to assign it"
> 4. Make constructor and $_instances array private. there are more variables
> you can make private.
Yeah, I fixed them :)
>
>>
>> public function __construct($type)
>> {
>> $this->selfType = $type;
>> }
>> public function setData($data)
>> {
>> $this->selfData = $data;
>> }
>> public function getData()
>> {
>> return $this->selfData;
>> }
>> }
>>
>> Sample::getInstance('A')->setData('AData');
>> echo Sample::getInstance('A')->getData();
>> Sample::getInstance('B')->setData('BData');
>> echo Sample::getInstance('A')->getData();
>> echo Sample::getInstance('B')->getData();
>>
>> </pre>
>>
>> Results is "ADataADataBData", is that ok?
>
>
> Result is obvious. I was worrying about the requests from different users.
> But seems web server is managing it to run requests sequentially, which
> gathered into a queue.
>
>>
>>
>> 2014-04-18 1:01 GMT+08:00 Chanaka Dharmarathna <pe.chanaka.ck at gmail.com>:
>> > On Thu, Apr 17, 2014 at 9:47 AM, Edward Cheng <c4150221 at gmail.com>
>> > wrote:
>> >>
>> >> Hi,
>> >> I thought we have these code can avoid errors, in my new PR I improve
>> >> it.
>> >> <pre>
>> >> /**
>> >> * Returns class instance.
>> >> *
>> >> * @param string $type the table type
>> >> *
>> >> * @return PMA_RecentFavoriteTable
>> >> */
>> >> public static function getInstance($type)
>> >> {
>> >> if (is_null(self::$_instance)) {
>> >> self::$_instance[$type] = new PMA_RecentFavoriteTable($type);
>> >> } else {
>> >> if (self::$_instance[$type]->table_type != $type) {
>> >> self::$_instance[$type] = new
>> >> PMA_RecentFavoriteTable($type);
>> >> }
>> >> }
>> >> return self::$_instance[$type];
>> >> }
>> >> </pre>
>> >> Does my PR fix it?
>> >>
>> >> 2014-04-17 0:02 GMT+08:00 Chanaka Dharmarathna
>> >> <pe.chanaka.ck at gmail.com>:
>> >> > Hi,
>> >> >
>> >> > It seems like, the latest PMA_RecentFavoriteTable is trying to behave
>> >> > as
>> >> > singleton design pattern. Is that a requirement ? I mean is there any
>> >> > reason
>> >> > for making it singleton ? By the way, there is good possibility to
>> >> > create
>> >> > new instances again and again with current logic.
>> >> >
>> >> > And the class has $table_type instance variable and more. Isn't it
>> >> > risky
>> >> > behaviour to share a static instance throughout the web server, which
>> >> > has
>> >> > instance variable which used in functions of that instance ?
>> >> >
>> >
>> >
>> > Hi Edward,
>> >
>> > Your code does not avoid creating many instances. By the way, we better
>> > first clarify our self, the requirement. Any thoughts ?
>
>
> Btw, if you are not posting inline, please use bottom posting ;)
Thank you very much!
>
> Regards !
> --
> Chanaka Dharmarathna
> http://chanakaindrajith.blogspot.com/
>
> ------------------------------------------------------------------------------
> Learn Graph Databases - Download FREE O'Reilly Book
> "Graph Databases" is the definitive new guide to graph databases and their
> applications. Written by three acclaimed leaders in the field,
> this first edition is now available. Download your free book today!
> http://p.sf.net/sfu/NeoTech
> _______________________________________________
> Phpmyadmin-devel mailing list
> Phpmyadmin-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/phpmyadmin-devel
>
--
Edward Cheng
More information about the Developers
mailing list