Hi,
what does everyone think about adding a second parameter to the
*_fetch_object() functions (sybase_fetch_object, mysql_fetch_object, ...
etc.) which allows users to define a class name which will then be used
instead of "stdClass"?

E.g.:
        class Article {
                var $article_id, $caption, $text;
        }

        $q= sybase_query('select * from article where article_id= 1');
        if ($q) while ($a= sybase_fetch_object($q, 'Article')) {
                var_dump($a);
        }
        
This saves a couple of lines of code in PHP (formerly, you'd either put
all of article's attributes in the constructor, made the constructor
accept an associative array or assigned all of the attributes like this:

        $a= &new Article();
        $a->article_id= $row['article_id'];
        $a->caption= $row['caption'];
        $a->text= $row['text'];

) all of which seems ugly and looks like unnecessary overhead. Since PHP
is missing a cast working on user-defined types (

        while ($o= sybase_fetch_object($q)) {
                $a= (Article)$o;
        }

) there would be another suggestion to introduce a function cast:

        while ($o= sybase_fetch_object($q)) {
                $a= cast($o, 'Article');
        }

Though maybe the name isn't ideal and could be implemented in userland,
too (
        function &cast(&$var, $type) {
                // [...Handle non-objects and normal types...]
                // [...Handle non-existant classes w/ name $type...]
                $ret= &new $type();
                foreach (get_object_vars($var) as $k=> $v) {
                        $ret->$k= $v;
                }
                return $ret;
        }

) but with more performance issues than if it was built-in. Maybe it's
even simpler to allow (MyType)$var syntax, but this would have to be
introduced into Zend Engine.

Thoughts?

-- 
Timm
Any sufficiently advanced bug is indistinguishable from a feature


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to