代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

phpstan能否检测到“初始化前不得访问类型化属性”错误?

  •  0
  • Alana Storm  · 技术社区  · 5 年前

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

    可以 phpstan 检测这些类型的错误?我已经在最高级别扫描了这个程序 普斯坦 看起来很开心

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

    如果

    0 回复  |  直到 5 年前
        1
  •  2
  •   Alana Storm    5 年前

    它看起来像是扫描未初始化属性值的能力 was added in July of 2020

    checkUninitializedProperties

    % 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                                                                                                  
    

    此外,冒着大声说出明显部分的风险,此检查采用特定的编程风格。例如,以下有效的PHP程序

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

    仍然失败

    推荐文章