1

I have a PHP program,

<?php
class Zap {
}

class Zip {
    public Zap $zap;
}
$object = new Zip;

var_dump(
    $object->zap
);

This program produces an error because of an initialized non-nullable property.

Fatal error: Uncaught Error: Typed property Zip::$zap must not be accessed before initialization in

Can phpstan detect these sorts of errors? I've scanned this program at the highest level, and phpstan seems happy

% ./vendor/bin/phpstan analyse --level=8 /tmp/test.php
 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%


                                                                                                                        
 [OK] No errors                                                                                                         

If phpstan can't detect these situations, is there another PHP Static Analyzer that can?

1 Answer 1

3

It looks like the ability to scan for uninitialized property values was added in July of 2020

However, this feature is disabled by default. You'll need to be using a configuration file that sets the checkUninitializedProperties value

% cat phpstan.neon 
parameters:
    checkUninitializedProperties: true

and then tell `phpstan` to use this configuration file.

 % ./vendor/bin/phpstan analyse --level=8 --configuration=./phpstan.neon /tmp/test.php
 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

 ------ ------------------------------------------------------------------------------------------------------ 
  Line   /tmp/test.php                                                                                         
 ------ ------------------------------------------------------------------------------------------------------ 
  6      Class Zip has an uninitialized property $zap. Give it default value or assign it in the constructor.  
 ------ ------------------------------------------------------------------------------------------------------ 

                                                                                                                
 [ERROR] Found 1 error                                                                                                  

Also, at the risk of saying the obvious part loud, this check assumes a particular style of programming. For example, the following valid PHP program

<?php
class Zap {
}

class Zip {
    public Zap $zap;
}
$object = new Zip;
$object->zap = new Zap;
var_dump(
    $object->zap
);

Still fails the checkUninitializedProperties check.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.