Retrieve public class properties with PHP’s arrow syntax

We already created a constructor in the Author class, which executes when a class is created, or instantiated. Since this $name class property has a public visibility, we can refer to it directly with the arrow syntax.

Let’s go ahead and assign this Author instance in our functions.php file to an $author1 variable. We’ll also create another author, so let’s duplicate this line out for the second author, and we will name this one Betsy Sue.

<?php declare(strict_types=1);

require('classes/Author.php');

function getPosts(): array
{
    $author1 = new Author('Mark Shust');
    $author2 = new Author('Betsy Sue');

We can now assign these values to new author values on the posts array. We can reference the $name class property directly after an array, since this name class property is public in scope.

<?php declare(strict_types=1);

require('classes/Author.php');

function getPosts(): array
{
    $author1 = new Author('Mark Shust');
    $author2 = new Author('Betsy Sue');

    return [
        [
            'title' => 'How to learn PHP',
            'content' => 'This is how you learn PHP.',
            'author' => $author1->name,
        ],
        [
            'title' => 'How to learn MySQL',
            'content' => 'This is how you learn MySQL.',
            'author' => $author1->name,
        ],
        [
            'title' => 'How to learn Nginx',
            'content' => 'This is how you learn Nginx.',
            'author' => $author2->name,
        ],
    ];
}

function getPostText(int $numPosts): string
{
    return $numPosts === 1 ? 'post' : 'posts';
}

We want to now display the author on our page, so let’s go back to the index.php file and add a “by” line that references this new author index on the posts array.

<?php declare(strict_types=1);

require('functions.php');

$title = 'My Blog';
$posts = getPosts();
$numPosts = count($posts);
$postText = getPostText($numPosts);
$numPostsDisplay = "$numPosts $postText";
?>
<h1><?= $title ?></h1>
<h2><?= $numPostsDisplay ?></h2>
<?php for ($i = 0; $i < $numPosts; $i++) : ?>
    <h3><?= $posts[$i]['title'] ?></h3>
    <p><?= $posts[$i]['content'] ?></p>
    <p>By <?= $posts[$i]['author'] ?></p>
<?php endfor ?>

When we refresh the page, we now see the author’s name next to each blog post.

Complete and Continue