my class (posts.php):
class Posts {
private function getPosts() {
$get_post = (new MYSQL) -> getAllPosts(); // here get all posts from my db
$GLOBALS["all_posts"] = $get_posts;
function all_posts() {
// When I use the return, the page enter on one infinite bucle.. If I use echo this doesnt happen.
return $GLOBALS["all_posts"];
}
}
}
I want that in my content.php that I can call the all_posts() function to get the array and print like this:
<div class="posts">
<?php foreach(all_posts() AS $post) : ?>
<h1><?php echo $post["title"]</h1>
<p><?php echo $post["content]; ?></p>
<?php endforeach; ?>
</div>
I want that the function all_posts() can be load in my content.php; In my index.php, before include the header.php, content.php and footer.php I load the Post->getPosts(). Thanks you.
Advertisement
Answer
This could be replaced with a function with a static variable:
<?php
function get_all_posts() {
static $posts;
if(is_null($posts))
$posts = (new MYSQL) -> getAllPosts();
return $posts;
}
But your problem is that you need to call the global assignment before you call Post::all_posts()
. Note that this function must be static (or the object a singleton) if you haven’t created a Post instance. If this becomes a static method, your get_posts method also must become static.
Condensing into one function makes for a simpler wrapper. However you do loose the benefit of class autoloading.