orklah/psalm-strict-visibility

一种用于检测通过代理调用私有或受保护方法的Psalm插件

安装数: 87,047

依赖: 2

建议者: 0

安全: 0

星标: 8

关注者: 3

分支: 0

开放问题: 1

类型:psalm-plugin

v3.0.0 2021-03-08 09:37 UTC

This package is auto-updated.

Last update: 2024-09-08 01:02:22 UTC


README

一个Psalm插件,用于检测通过代理调用私有或受保护方法

安装

$ composer require --dev orklah/psalm-strict-visibility
$ vendor/bin/psalm-plugin enable orklah/psalm-strict-visibility

使用

运行您通常的Psalm命令

$ vendor/bin/psalm

说明

PHP中的可见性不是强制的。根据php.net

相同类型的对象将可以访问彼此的私有和受保护成员,即使它们不是相同的实例。这是因为在对象内部,实现特定细节已经已知。

这意味着从同一对象的另一个实例调用私有方法时,该私有方法实际上并不是私有的。这种行为是可能的

class PrivateTests{
    private string $secret;

    private function privateMethod(): void {echo $this->secret;}

    public function __construct(string $secret){
        $this->secret = $secret;
    }

    public function proxyByParam(PrivateTests $a): void {
        $a->privateMethod(); //This is a call to a private method from outside the instance
    }
}

$first_secret_key = new PrivateTests('first_secret_key');
$second_secret_key = new PrivateTests('second_secret_key');

$first_secret_key->proxyByParam($second_secret_key);

此对$first_secret_key实例的调用实际上会在$second_secret_key上调用私有方法,并显示$second_secret_key的私有属性的值

此插件旨在填补PHP可见性检查中的这些漏洞