Yes, an object containing other objects is “natural”. A House
object contains an array of Furniture
objects in its $furnitures
property… Such as in our case… WP_Query
contains an array of WP_Post
objects in its $posts
property… A one-to-many relationship. This is an Aggregation.
OOP is all about programatically modelizing things. These things are:
- From the system context, data and process.
- From the real world context, entity and logic.
These 2 contexts are relationnal. The data is defined by its entity and the process is defined by its logic. These 2 contexts are then transmutable into a common programming pattern – OOP…
The WP_Post
object is an entity holding and defined by – its data. It’s what we call a Domain Model Object. Though, since it doesn’t include any Domain Logic, design purists may call it an Anemic Domain Model Object instead.
The WP_Query
object is a process (service). In fact, it is defined by the domain logic of our WP_Post
object with for example:
$the_query->have_posts();
$the_query->the_post();
The WP Loop itself iterates through the WP_Query::$posts
and is in charge of switching context (the global $post
object).
From within The Loop:
-
WP_Query::the_post()
initializes the global$post
. You then can access the$post
data via, for example,get_the_ID()
or$post->ID
. -
WP_Query::have_posts()
checks if there are otherWP_Query::$posts
to iterate through.