📖 Scenario: You are creating a simple PHP class to represent a book in a library system. Each book has a title, an author, and a number of pages.
🎯 Goal: Build a PHP class Book using constructor promotion to set the properties title, author, and pages. Then create an instance and display its details.
📋 What You'll Learn
Create a class called Book with three properties: title, author, and pages.
Use constructor promotion to initialize these properties in the constructor.
Create a variable called myBook that is an instance of Book with the title '1984', author 'George Orwell', and pages 328.
Print the book details in the format: 'Title: 1984, Author: George Orwell, Pages: 328'.
💡 Why This Matters
🌍 Real World
Constructor promotion helps write cleaner and shorter code when creating classes with many properties, common in real-world PHP applications like content management systems or APIs.
💼 Career
Understanding constructor promotion is useful for PHP developers to write modern, efficient, and readable code, which is valued in many web development jobs.
Progress0 / 4 steps
1
Create the Book class with promoted properties
Create a class called Book with a constructor that uses constructor promotion to declare and initialize the public properties title (string), author (string), and pages (int).
PHP
Hint
Use the syntax public function __construct(public string $title, public string $author, public int $pages) {} inside the class.
2
Create an instance of the Book class
Create a variable called myBook and assign it a new Book object with the title '1984', author 'George Orwell', and pages 328.
PHP
Hint
Use $myBook = new Book('1984', 'George Orwell', 328); to create the object.
3
Access the properties of the Book instance
Use a print statement to display the book details in the format: 'Title: 1984, Author: George Orwell, Pages: 328' by accessing the title, author, and pages properties of myBook.
PHP
Hint
Use print("Title: {$myBook->title}, Author: {$myBook->author}, Pages: {$myBook->pages}"); to show the details.
4
Display the final output
Run the program and ensure it prints exactly: Title: 1984, Author: George Orwell, Pages: 328
PHP
Hint
Make sure your print statement matches the exact output including punctuation and spacing.
Practice
(1/5)
1. What is the main benefit of using constructor promotion in PHP classes?
easy
A. It automatically generates getter and setter methods for properties.
B. It allows declaring and assigning properties in one step inside the constructor.
C. It enforces strict typing on all class properties.
D. It makes the class immutable by default.
Solution
Step 1: Understand constructor promotion purpose
Constructor promotion lets you declare and assign properties directly in the constructor parameters.
Step 2: Compare options
Only It allows declaring and assigning properties in one step inside the constructor. correctly describes this benefit. Options B, C, and D describe unrelated features.
Final Answer:
It allows declaring and assigning properties in one step inside the constructor. -> Option B
Quick Check:
Constructor promotion = Declare and assign properties together [OK]
Hint: Constructor promotion combines property declaration and assignment [OK]
Common Mistakes:
Thinking it auto-generates getters/setters
Confusing with immutability
Assuming it enforces typing
2. Which of the following is the correct syntax for constructor promotion in PHP?
easy
A. public function __construct(private string $name, int $age) {}
B. public function __construct(var $name, var $age) {}
C. public function __construct(string $name, int $age) { $this->name = $name; }
D. public function __construct(private string $name, private int $age) {}
Solution
Step 1: Identify visibility keywords in constructor parameters
Constructor promotion requires visibility keywords like private, protected, or public before parameters.
Step 2: Check each option
public function __construct(private string $name, private int $age) {} uses private for both parameters, which is correct. public function __construct(private string $name, int $age) {} misses visibility for $age. public function __construct(string $name, int $age) { $this->name = $name; } is normal assignment, not promotion. public function __construct(var $name, var $age) {} uses invalid 'var' keyword.
Final Answer:
public function __construct(private string $name, private int $age) {} -> Option D
Hint: Use visibility keywords on constructor parameters for promotion [OK]
Common Mistakes:
Omitting visibility keyword
Using invalid keywords like var
Confusing promotion with manual assignment
3. What will be the output of the following PHP code?
class User {
public function __construct(private string $name, private int $age) {}
public function getInfo() {
return "$this->name is $this->age years old.";
}
}
$user = new User('Alice', 30);
echo $user->getInfo();
medium
A. Alice is 30 years old.
B. Error: Cannot access private property
C. 30 is Alice years old.
D. Syntax error
Solution
Step 1: Understand property promotion and access
The properties $name and $age are private but accessible inside class methods like getInfo().
Step 2: Analyze getInfo() output
It returns a string combining $name and $age values. Since $user is created with 'Alice' and 30, output is "Alice is 30 years old."
Final Answer:
Alice is 30 years old. -> Option A
Quick Check:
Private properties accessible inside class = correct output [OK]
Hint: Private promoted properties accessible inside class methods [OK]
Common Mistakes:
Assuming private properties are inaccessible inside class
Mixing order of name and age in output
Expecting syntax error
4. Identify the error in this PHP class using constructor promotion:
class Product {
public function __construct(private $name, private int $price) {}
}
medium
A. Cannot use private keyword in constructor parameters.
B. Price parameter should be string, not int.
C. Missing type declaration for $name parameter.
D. Constructor promotion requires public visibility only.
Solution
Step 1: Check parameter declarations
The $name parameter lacks a type declaration, which is required for constructor promotion to be clear and strict.
Step 2: Validate other options
Private visibility is allowed, int type for price is valid, and promotion supports all visibility levels.
Final Answer:
Missing type declaration for $name parameter. -> Option C
Quick Check:
All promoted parameters need type declarations [OK]
Hint: All promoted parameters must have types declared [OK]
Common Mistakes:
Omitting type for promoted parameters
Thinking only public visibility allowed
Confusing parameter types
5. You want to create a PHP class Book with promoted properties title (string), author (string), and pages (int). You also want to add a method summary() that returns a string like "Title by Author, Pages pages.". Which of the following is the correct complete class code?
hard
A. class Book {
public function __construct(public string $title, public string $author, public int $pages) {}
public function summary() {
return "$this->title by $this->author, $this->pages pages.";
}
}
B. class Book {
public string $title;
public string $author;
public int $pages;
public function __construct($title, $author, $pages) {
$this->title = $title;
$this->author = $author;
$this->pages = $pages;
}
public function summary() {
return "$title by $author, $pages pages.";
}
}
C. class Book {
public function __construct(string $title, string $author, int $pages) {}
public function summary() {
return "$this->title by $this->author, $this->pages pages.";
}
}
D. class Book {
public function __construct(private string $title, private string $author, private int $pages) {}
public function summary() {
return "$title by $author, $pages pages.";
}
}
Solution
Step 1: Check constructor promotion syntax
class Book {
public function __construct(public string $title, public string $author, public int $pages) {}
public function summary() {
return "$this->title by $this->author, $this->pages pages.";
}
} correctly uses public visibility with types in constructor parameters to promote properties.
Step 2: Verify summary() method access and string
class Book {
public function __construct(public string $title, public string $author, public int $pages) {}
public function summary() {
return "$this->title by $this->author, $this->pages pages.";
}
} uses $this->property to access promoted properties and returns the correct formatted string.
Step 3: Analyze other options
class Book {
public string $title;
public string $author;
public int $pages;
public function __construct($title, $author, $pages) {
$this->title = $title;
$this->author = $author;
$this->pages = $pages;
}
public function summary() {
return "$title by $author, $pages pages.";
}
} uses manual assignment but summary() incorrectly uses variables without $this->. class Book {
public function __construct(string $title, string $author, int $pages) {}
public function summary() {
return "$this->title by $this->author, $this->pages pages.";
}
} promotes parameters but does not assign them to properties. class Book {
public function __construct(private string $title, private string $author, private int $pages) {}
public function summary() {
return "$title by $author, $pages pages.";
}
} uses private properties but summary() accesses variables without $this->, causing errors.
Final Answer:
Option A code with public promoted properties and correct summary() -> Option A
Quick Check:
Promotion + correct property access = class Book {
public function __construct(public string $title, public string $author, public int $pages) {}
public function summary() {
return "$this->title by $this->author, $this->pages pages.";
}
} [OK]
Hint: Use visibility + $this->property in methods for promoted properties [OK]
Common Mistakes:
Forgetting $this-> in methods
Not assigning promoted properties properly
Mixing private properties with wrong access
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.