php-general Digest 7 Dec 2010 20:47:48 -0000 Issue 7074

Topics (messages 309891 through 309895):

Re: How can I call GD's imagepng() directly from my class?
        309891 by: Richard Quadling

new keyword combined with other things...
        309892 by: Alexandru Patranescu
        309893 by: Daniel P. Brown
        309894 by: Gerardo Benitez
        309895 by: Jim Lucas

Administrivia:

To subscribe to the digest, e-mail:
        php-general-digest-subscr...@lists.php.net

To unsubscribe from the digest, e-mail:
        php-general-digest-unsubscr...@lists.php.net

To post to the list, e-mail:
        php-gene...@lists.php.net


----------------------------------------------------------------------
--- Begin Message ---
On 7 December 2010 07:19, Nathan Nobbe <quickshif...@gmail.com> wrote:
> On Mon, Dec 6, 2010 at 5:26 PM, Daevid Vincent <dae...@daevid.com> wrote:
>
>>
>> I got a little 'hack' further, but not loving it. Maybe I'll move the image
>> to a $_SESSION variable and then have the "gdtest.php" pull it and echo it
>> that way....
>>
>
> well i think you may be in the right direction, however, id be interested to
> see what others on the list think about this particular approach.
>  personally, i wouldnt store an image in the session.. but i would certainly
> provision a temporary directory inside the webroot where you could put these
> images.
>
> perhaps if the images are tied to sessions, throw cleanup in a custom
> session cleanup cron, or queue the images for deletion when the user logs
> out.  seems to me like the session is an area of abuse in many php apps ive
> seen.  even though the standard store is file based, i would still recommend
> a separate store for images.
>
>
>>
>>        public function render_image()
>>        {
>>                $my_img = imagecreate( 200, 80 );
>>                $background = imagecolorallocate( $my_img, 0, 0, 255 );
>>                $text_colour = imagecolorallocate( $my_img, 255, 255, 0 );
>>                $line_colour = imagecolorallocate( $my_img, 128, 255, 0 );
>>                imagestring( $my_img, 4, 30, 25, "Test Image", $text_colour
>> );
>>                imagesetthickness ( $my_img, 5 );
>>                imageline( $my_img, 30, 45, 165, 45, $line_colour );
>>
>>                 ob_start();
>>                 header( "Content-type: image/png" );
>>                header('Content-Length: ' . strlen($my_img));
>>                imagepng( $my_img );
>>                 $final_image_data = ob_get_contents();
>>                ob_end_clean();
>>
>>                imagecolordeallocate( $line_color );
>>                imagecolordeallocate( $text_color );
>>                imagecolordeallocate( $background );
>>                imagedestroy( $my_img );
>>
>>                 echo
>> 'data:image/png;base64,'.base64_encode($final_image_data);
>>        }
>>
>> <img src="<?php $my_lopa->render_image(); ?>" width="200" height="80">
>>
>
> i dunno, why not just have something a bit simpler, where you generate an
> image and store it to disk.  the function could return the path where the
> image was saved.  then when the browser loads that resource php doesnt even
> fire up, the webserver just sends back the image directly.
>
> not sure on whether you would pass in the location or if you would have
> internal logic cook up the path, but im sure you could determine that based
> on the rest of the code .. lets suppose your class computes it internally,
>
> something like
>
> <?php
> class LOPA
> {
>  private function get_temp_path()
>  {
>     // some session specific logic to cook up a temporary path
>     // something relative to the web root ...
>  }
>
>  public function render_image()
>  {
>    $my_img = imagecreate( 200, 80 );
>
>    $background = imagecolorallocate( $my_img, 0, 0, 255 );
>    $text_colour = imagecolorallocate( $my_img, 255, 255, 0 );
>    $line_colour = imagecolorallocate( $my_img, 128, 255, 0 );
>
>    imagestring( $my_img, 4, 30, 25, "Test Image", $text_colour);
>    imagesetthickness ( $my_img, 5 );
>    imageline( $my_img, 30, 45, 165, 45, $line_colour );
>
>    // now saving to a temp location inside the webroot
>    $temp_path = $this->get_temp_path();
>    imagepng( $my_img, $temp_path );
>
>    imagecolordeallocate( $line_color );
>    imagecolordeallocate( $text_color );
>    imagecolordeallocate( $background );
>    imagedestroy( $my_img );
>
>    // returning path to temp location
>    return $temp_path;
>  }
> }
> ?>
>
> <!-- now this just has a path which points right back to an image, served
> directly -->
> <img src="<?php $my_lopa->render_image(); ?>" width="200" height="80">
>
> -nathan
>
I had a similar issue in generating a badge based upon various stats.

I found that there were many individuals who shared the same stats, so
the badge was the same. Even more advanced users often shared stats.

So, rather than creating an image per individual, I based the name of
the image on $md5BadgeData = md5(serialize($badgeData)).

So, main page loads and gathers the stats for person.

If the badge doesn't exist, then creates the PNG file.

Write out the HTML using <img src="./badges/{$md5BadgeData}.png" />

If a user's stats change, they'll have a new badge. Sure, there will
be orphaned badges, but they are tiny little things and I don't have
gazillion users.




-- 
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

--- End Message ---
--- Begin Message ---
In many other languages this will work:

*$result = new Object() -> method();*

But in php, it fails at parsing.
I've tried with parenthesis around new but nothing. Anyhow, as I saw later,
*new* operator has precedence over others so this couldn't be a solution.
I know a static function can be defined and the above statement can
transform into

*$result = Object::getNewInstance() -> method()*

but is there any way to write it directly? and if not, why isn't this
implemented yet and when will it be?

best regards,
Patranescu Alexandru

--- End Message ---
--- Begin Message ---
On Tue, Dec 7, 2010 at 10:40, Alexandru Patranescu <dreal...@gmail.com> wrote:
>
> but is there any way to write it directly? and if not, why isn't this
> implemented yet and when will it be?

    That kind of chaining has not yet been implemented in PHP --- but
it's being discussed and voted now, as a matter of fact.  There's no
guarantee if or when it will be implemented.  It's looking positive
that it will, but whether it will be soon or not, it's hard to tell
right now.

-- 
</Daniel P. Brown>
Dedicated Servers, Cloud and Cloud Hybrid Solutions, VPS, Hosting
(866-) 725-4321
http://www.parasane.net/

--- End Message ---
--- Begin Message ---
Try with



$result = Object::method();

this is a static method in a class.

the operator -> is access to a member in an object.

Gerardo.





On Tue, Dec 7, 2010 at 12:40 PM, Alexandru Patranescu <dreal...@gmail.com>wrote:

> In many other languages this will work:
>
> *$result = new Object() -> method();*
>
> But in php, it fails at parsing.
> I've tried with parenthesis around new but nothing. Anyhow, as I saw later,
> *new* operator has precedence over others so this couldn't be a solution.
> I know a static function can be defined and the above statement can
> transform into
>
> *$result = Object::getNewInstance() -> method()*
>
> but is there any way to write it directly? and if not, why isn't this
> implemented yet and when will it be?
>
> best regards,
> Patranescu Alexandru
>



-- 
Gerardo Benitez
-------------------------
www.webseficientes.com.ar
Diseño web, programación, Seo

--- End Message ---
--- Begin Message ---
On 12/7/2010 7:40 AM, Alexandru Patranescu wrote:
> In many other languages this will work:
> 
> *$result = new Object() -> method();*
> 
> But in php, it fails at parsing.
> I've tried with parenthesis around new but nothing. Anyhow, as I saw later,
> *new* operator has precedence over others so this couldn't be a solution.
> I know a static function can be defined and the above statement can
> transform into
> 
> *$result = Object::getNewInstance() -> method()*
> 
> but is there any way to write it directly? and if not, why isn't this
> implemented yet and when will it be?
> 
> best regards,
> Patranescu Alexandru
> 


Here is what I do if I want to make it a one liner...

<?php

function myNew($obj='stdClass') {
        return new $obj();
}

class CustomClass {
        function PrintString($str='Something')
        {
                print($str);
        }
        function ReturnString($str='Something')
        {
                return $str;
        }
}


myNew('CustomClass')->PrintString();

echo myNew('CustomClass')->ReturnString('Something Else');

$var = myNew('CustomClass')->ReturnString('And again...');

echo $var;

?>

I also use the following if I want to use the Singleton method of getting my 
data.

<?php

class myClass {
        static $_instance;
        static function run($DefaultValues=null)
        {
                if(self::$_instance === null)
                {
                        //First and only construction.
                        self::$_instance = new self($DefaultValues);
                }
                return self::$_instance;
        }
        function PrintString($str='Default Value')
        {
                print $str;
        }
        function ReturnString($str='Something')
        {
                return $str;
        }
}

myClass::run()->PrintString();

echo myClass::run()->ReturnString();

$var = myClass::run()->ReturnString();

echo $var;

?>

YMMV

--- End Message ---

Reply via email to