orklah / psalm-strict-visibility
一种用于检测通过代理调用私有或受保护方法的Psalm插件
v3.0.0
2021-03-08 09:37 UTC
Requires
- php: ^7.1|^8.0
- ext-simplexml: *
Requires (Dev)
- nikic/php-parser: ^4.0
- vimeo/psalm: ^4.0
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可见性检查中的这些漏洞