📖 Scenario: You are building a simple system to store information about books in a library. Each book has a title and an author. Once a book is created, its details should not change.
🎯 Goal: Create a readonly class called Book with two properties: title and author. Initialize these properties in the constructor and then display the book details.
📋 What You'll Learn
Create a readonly class named Book
Add two public properties: title and author
Initialize these properties using a constructor
Create an instance of Book with specific values
Print the book's title and author
💡 Why This Matters
🌍 Real World
Readonly classes are useful when you want to create objects that should not change after creation, such as configuration settings, fixed data records, or value objects.
💼 Career
Understanding readonly classes helps you write safer and more predictable code, which is important in professional PHP development to avoid bugs and maintain data integrity.
Progress0 / 4 steps
1
Create the readonly class with properties
Create a readonly class called Book with two public properties: title and author.
PHP
Hint
Use the readonly keyword before class. The properties are implicitly readonly.
2
Add the constructor to initialize properties
Add a constructor method __construct to the Book class that takes two parameters: string $title and string $author. Inside the constructor, assign these parameters to the readonly properties $title and $author.
PHP
Hint
Use public function __construct(string $title, string $author) and assign the parameters to the properties.
3
Create an instance of the readonly class
Create a variable called $book and assign it a new instance of the Book class with the title '1984' and author 'George Orwell'.
PHP
Hint
Use new Book('1984', 'George Orwell') and assign it to $book.
4
Print the book details
Print the book's title and author using echo in the format: Title: 1984, Author: George Orwell.
PHP
Hint
Use echo and access the properties with $book->title and $book->author.
Practice
(1/5)
1. What does a readonly class in PHP ensure about its properties?
easy
A. Properties are static and shared between all instances.
B. Properties can be changed anytime after creation.
C. All properties cannot be changed after the object is created.
D. Properties are private and cannot be accessed outside the class.
Solution
Step 1: Understand the meaning of readonly class
A readonly class means all its properties are readonly by default, so they cannot be changed after the object is created.
Step 2: Compare options with this definition
Only the option stating "All properties cannot be changed after the object is created." correctly states that properties cannot be changed after creation.
Final Answer:
All properties cannot be changed after the object is created. -> Option C
Quick Check:
Readonly class = immutable properties [OK]
Hint: Readonly means no property changes after creation [OK]
Common Mistakes:
Thinking readonly means private or static
Assuming properties can be changed anytime
Confusing readonly with access modifiers
2. Which of the following is the correct syntax to declare a readonly class in PHP?
easy
A. readonly class User { public readonly string $name; }
B. class readonly User {}
C. class User readonly {}
D. readonly class User {}
Solution
Step 1: Recall PHP readonly class syntax
In PHP, the keyword readonly comes before class to declare a readonly class.
Step 2: Check each option
readonly class User {} correctly uses readonly class User {}. class readonly User {} reverses the order, class User readonly {} places readonly incorrectly, and readonly class User { public readonly string $name; } is invalid syntax.
Final Answer:
readonly class User {} -> Option D
Quick Check:
Keyword readonly before class [OK]
Hint: Put readonly before class keyword [OK]
Common Mistakes:
Placing readonly after class name
Using readonly as a property only
Mixing readonly with access modifiers
3. What will be the output of this PHP code?
readonly class Point {
public int $x;
public int $y;
public function __construct(int $x, int $y) {
$this->x = $x;
$this->y = $y;
}
}
$p = new Point(5, 10);
echo $p->x . ', ' . $p->y;
medium
A. 5, 10
B. Error: Cannot modify readonly property
C. 0, 0
D. 5 10
Solution
Step 1: Understand readonly class property initialization
Readonly properties can be set inside the constructor. Here, $x and $y are set to 5 and 10 respectively.
Step 2: Check output of echo statement
The echo prints 5, 10 as expected because the properties were initialized correctly and not modified later.
Final Answer:
5, 10 -> Option A
Quick Check:
Readonly properties set in constructor output values [OK]
Hint: Readonly properties can be set in constructor only [OK]
Common Mistakes:
Thinking readonly properties cannot be set at all
Expecting error on property access
Confusing output format with space instead of comma
4. Identify the error in this PHP code using a readonly class:
readonly class User {
public string $name;
public function __construct(string $name) {
$this->name = $name;
}
}
$user = new User('Alice');
$user->name = 'Bob';
medium
A. Cannot assign to readonly property after construction
B. Missing readonly keyword before property declaration
C. Constructor must be static in readonly class
D. No error, code runs fine
Solution
Step 1: Understand readonly property behavior
In a readonly class, properties can only be assigned once during construction. Changing them later causes an error.
Step 2: Analyze the code
The code tries to change $user->name after construction, which is not allowed and causes an error.
Final Answer:
Cannot assign to readonly property after construction -> Option A
Quick Check:
Readonly properties are immutable after construction [OK]
Hint: Readonly properties cannot be changed after constructor [OK]
Common Mistakes:
Thinking readonly properties can be changed anytime
Confusing readonly class with readonly property keyword
Ignoring error on property reassignment
5. Given this readonly class, which code snippet correctly creates an immutable user and tries to update the name without error?
readonly class User {
public string $name;
public function __construct(string $name) {
$this->name = $name;
}
}
Choose the correct approach:
hard
A. $user = new User('Alice');
$user->name = 'Bob';
B. $user = new User('Alice');
$newUser = new User('Bob');
C. $user = new User('Alice');
$user->name = strtoupper($user->name);
D. $user = new User('Alice');
unset($user->name);
Solution
Step 1: Understand immutability of readonly classes
Readonly class properties cannot be changed after construction, so to 'change' data, create a new object with new values.
Step 2: Evaluate each option
$user = new User('Alice');
$user->name = 'Bob'; tries to change property directly - error. $user = new User('Alice');
$user->name = strtoupper($user->name); tries to modify property - error. $user = new User('Alice');
$newUser = new User('Bob'); creates a new User object with new name - correct. $user = new User('Alice');
unset($user->name); tries to unset property - invalid.
Final Answer:
Create a new User object with updated name -> Option B
Quick Check:
Immutable means create new object for changes [OK]
Hint: Change readonly data by creating new object [OK]
Common Mistakes:
Trying to modify readonly property directly
Using unset on readonly properties
Assuming readonly means properties can be changed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.