Bird
Raised Fist0
PHPprogramming~10 mins

Declare strict_types directive in PHP - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Declare strict_types directive
Start PHP file
↓
Declare strict_types=1?
No→Default weak typing
Yes↓
Enable strict type checking
↓
Run code with strict types
↓
Type errors if mismatch
↓
End
The strict_types directive tells PHP to enforce exact types for function calls, stopping automatic type conversion.
Execution Sample
PHP
<?php
declare(strict_types=1);
function add(int $a, int $b): int {
  return $a + $b;
}
echo add(1, 2);
This code enables strict types and defines a function that adds two integers, then prints the result.
Execution Table
StepActionEvaluationResult
1Start script with declare(strict_types=1);strict_types enabledStrict mode ON
2Call add(1, 2)Check argument typesBoth are int, OK
3Execute add functionReturn 1 + 23
4Print resultOutput 33
5Call add('1', 2)Check argument typesTypeError thrown (string not int)
💡 Execution stops with TypeError if argument types do not exactly match when strict_types=1
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 5
$aundefined11TypeError (no value)
$bundefined22TypeError (no value)
Return valueundefinedundefined3No return due to error
Key Moments - 2 Insights
Why does add('1', 2) cause an error with strict_types=1?
Because strict_types=1 requires exact types. The string '1' is not automatically converted to int, so PHP throws a TypeError as shown in execution_table step 5.
What happens if declare(strict_types=1) is missing?
PHP uses weak typing and automatically converts types. So add('1', 2) would work by converting '1' to int 1, no error occurs.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output at step 4?
A3
BTypeError
C1
DNo output
💡 Hint
Check the 'Result' column at step 4 in execution_table
At which step does the TypeError occur when calling add('1', 2)?
AStep 2
BStep 5
CStep 3
DStep 4
💡 Hint
Look for the row mentioning TypeError in execution_table
If declare(strict_types=1) was removed, what would happen at step 5?
AScript stops immediately
BTypeError still thrown
CFunction call succeeds with automatic type conversion
DOutput is empty
💡 Hint
Refer to key_moments explanation about behavior without strict_types
Concept Snapshot
declare(strict_types=1);
- Placed at top of PHP file
- Enables strict type checking for function calls
- Requires exact argument types (no automatic conversion)
- Causes TypeError if types mismatch
- Helps catch bugs early by enforcing types
Full Transcript
This visual trace shows how the declare(strict_types=1) directive in PHP enforces strict type checking. When enabled, PHP requires function arguments to match declared types exactly. The example code defines a function add(int $a, int $b) and calls it with integers 1 and 2, which works fine and outputs 3. However, calling add('1', 2) causes a TypeError because the string '1' is not automatically converted to int under strict types. The variable tracker shows how $a and $b get values or cause errors. Key moments clarify why strict types cause errors and what happens if the directive is missing. The quiz tests understanding of output, error steps, and behavior changes without strict types.

Practice

(1/5)
1. What does the declare(strict_types=1); directive do in a PHP file?
easy
A. It enables automatic type conversion for function arguments.
B. It disables all error reporting in the PHP script.
C. It sets the default timezone for the script.
D. It forces PHP to check that function arguments match their declared types exactly.

Solution

  1. Step 1: Understand the purpose of strict_types

    The directive declare(strict_types=1); tells PHP to enforce exact type matching for function arguments and return values.
  2. Step 2: Compare with other options

    Options B, C, and D describe unrelated PHP features: error reporting, timezone setting, and type conversion, which are not controlled by this directive.
  3. Final Answer:

    It forces PHP to check that function arguments match their declared types exactly. -> Option D
  4. Quick Check:

    strict_types enforces exact type checks = A [OK]
Hint: Strict types means exact argument types only [OK]
Common Mistakes:
  • Thinking it disables errors
  • Confusing with timezone settings
  • Assuming it enables type coercion
2. Which of the following is the correct way to enable strict types in a PHP file?
easy
A.
B.
C.
D.

Solution

  1. Step 1: Check correct syntax for declare directive

    The correct syntax is declare(strict_types=1); placed at the top of the PHP file.
  2. Step 2: Analyze each option

    <?php declare(strict_types=1); ?> uses the exact correct syntax. Options A and B use invalid PHP syntax. <?php declare(strict_types = true); ?> uses true instead of 1, which is invalid for this directive.
  3. Final Answer:

    <?php declare(strict_types=1); ?> -> Option C
  4. Quick Check:

    declare(strict_types=1) is correct syntax = C [OK]
Hint: Use declare(strict_types=1); at file top [OK]
Common Mistakes:
  • Using true instead of 1
  • Trying to assign strict_types as a variable
  • Calling a non-existent function
3. Given this PHP code with strict types enabled:
<?php
declare(strict_types=1);
function add(int $a, int $b): int {
    return $a + $b;
}
echo add(5, '3');
?>

What will be the output?
medium
A. TypeError: Argument 2 passed must be of the type int, string given
B. 8
C. 53
D. Warning: Implicit conversion from string to int

Solution

  1. Step 1: Understand strict_types effect on function calls

    With declare(strict_types=1);, PHP requires exact types. Passing a string '3' to a parameter typed as int causes an error.
  2. Step 2: Predict the runtime behavior

    PHP throws a TypeError because the second argument is a string, not an int, and no automatic conversion happens.
  3. Final Answer:

    TypeError: Argument 2 passed must be of the type int, string given -> Option A
  4. Quick Check:

    strict_types=1 + wrong argument type = TypeError [OK]
Hint: Strict types cause TypeError on wrong argument types [OK]
Common Mistakes:
  • Assuming PHP converts string '3' to int automatically
  • Expecting output 8 or 53
  • Confusing warning with error
4. Identify the error in this PHP code snippet:
<?php
function multiply(int $x, int $y): int {
    return $x * $y;
}

declare(strict_types=1);
echo multiply(4, 5);
?>
medium
A. The declare(strict_types=1); must be at the top before any code.
B. The function multiply must return a string, not int.
C. The function parameters should not have types declared.
D. There is no error; the code runs fine.

Solution

  1. Step 1: Check position of declare(strict_types=1);

    The strict_types directive must be declared at the very top of the PHP file, before any code or whitespace.
  2. Step 2: Analyze the code order

    Here, the function is declared before the strict_types directive, which is invalid and causes the directive to be ignored or cause an error.
  3. Final Answer:

    The declare(strict_types=1); must be at the top before any code. -> Option A
  4. Quick Check:

    declare(strict_types=1) must be first line = B [OK]
Hint: Put declare(strict_types=1); at file very top [OK]
Common Mistakes:
  • Placing declare after code or functions
  • Thinking return type must be string
  • Removing type declarations from parameters
5. You want to write a PHP function that accepts only integers and returns their sum. You also want to ensure no accidental type coercion happens anywhere in the file. How should you set up your PHP file?
hard
A. Use no type declarations and rely on PHP's automatic type conversion.
B. Place declare(strict_types=1); at the top, then define the function with int types.
C. Use declare(strict_types=0); and define the function with int types.
D. Define the function with int types but do not use declare(strict_types=1);

Solution

  1. Step 1: Enable strict types at the file start

    To prevent type coercion, add declare(strict_types=1); at the very top of the PHP file.
  2. Step 2: Define the function with int type hints

    Declare the function parameters and return type as int to enforce integer-only usage.
  3. Final Answer:

    Place declare(strict_types=1); at the top, then define the function with int types. -> Option B
  4. Quick Check:

    strict_types=1 + int types = strict integer enforcement [OK]
Hint: Use declare(strict_types=1); plus int type hints [OK]
Common Mistakes:
  • Skipping declare(strict_types=1);
  • Using declare(strict_types=0); which allows coercion
  • Not adding type hints in function
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard