Using Global Variables Expensive for PHP

I am writing some functions to display Custom Fields across multiple templates. Rather than getting each CF like so:

$var = get_post_meta($post->ID, 'my_cf_key', true);

and then checking if the var exists, if so, doing some HTML and then echoing the variable, I have started another approach.

My concern is that this new approach might become more expensive and load on the server… Here it is…

Each CF has a function to a) get it via the above code, then b) echo it. Within each get function, I am calling global $post.

Then, on each actual template page, I am first checking the get function for that CF, then doing the echo function, like so:

if ( func_get_the_cf() ) {
echo '<div>';
func_the_cf();
echo '</div>';
};

So the above looks like it is having to do this for each one… a) get a global $post from the get function and get a value from the DB, then if that exists, run the echo function, which again has to do global post and assign a value from the DB by running the get function.

So it seems like I am doing things in unncessary loops just so I can have clean looking template pages.

is this too much PHP? Am I making this too expensive on the server?

Thanks.. I’m just 5% into the project now so I rather get some opinions before I finish it all the way I’m doing it just to change it all.

Thank you!

1 Answer
1

Here is a basic class which you can create once:

if ( ! class_exists('my_class') ) :

class my_class {

    public $my_var;

    // This variable is for a single instance
    static $instance;

    function __construct () {
        // Call other methods like this
        $this->initialize();
    }

    function initialize () {
        // Populate your variables here
        $this->my_var="any value you want";
    }

    static function get_instance () {
        // Static variables are persistant
        // Notice the 'self::' prefix to access them
        if ( empty(self::$instance) )
            self::$instance = new my_class();
        return self::$instance;
    }    
}

endif;

Now in your template files you can access the class like this:

<?php $var = my_class::get_instance()->my_var; ?>

Leave a Comment