(PECL uopz 2 >= 2.0.2, PECL uopz 5, PECL uopz 6, PECL uopz 7)
uopz_flags — 関数またはクラスのフラグを 取得/設定 する
$function
, int $flags
= PHP_INT_MAX): int$class
, string $function
, int $flags
= PHP_INT_MAX): int実行時にクラスまたは関数エントリのフラグを 取得/設定 します。
class
クラス名を指定します。
function
関数名を指定します。
class
が指定され、
かつ function
の値にから文字列が指定されると、
uopz_flags()
はクラスエントリのフラグを取得または設定します。
flags
ZEND_ACC_ フラグの有効なセット。 省略された場合、uopz_flags() 関数が getter として振る舞います。
フラグを設定する場合、古いフラグを返します。それ以外の場合、現在のフラグを返します。
PHP 7.4.0 以降で flags
が渡された場合は、
OPcache が有効になっており、
かつ class
や function
のエントリが変更不能な場合、
RuntimeException をスローするようになりました。
バージョン | 説明 |
---|---|
PECL uopz 5.0.0 |
flags はオプションになりました。
このバージョンより前は、
uopz_flags() を getter として使うために
ZEND_ACC_FETCH を渡さなければなりませんでした。
|
例1 uopz_flags() の例
<?php
class Test {
public function method() {
return __CLASS__;
}
}
$flags = uopz_flags("Test", "method");
var_dump((bool) (uopz_flags("Test", "method") & ZEND_ACC_PRIVATE));
var_dump((bool) (uopz_flags("Test", "method") & ZEND_ACC_STATIC));
var_dump(uopz_flags("Test", "method", $flags|ZEND_ACC_STATIC|ZEND_ACC_PRIVATE));
var_dump((bool) (uopz_flags("Test", "method") & ZEND_ACC_PRIVATE));
var_dump((bool) (uopz_flags("Test", "method") & ZEND_ACC_STATIC));
?>
上の例の出力は、 たとえば以下のようになります。
bool(false) bool(false) int(1234567890) bool(true) bool(true)
例2 クラスの final 宣言を外す
<?php
final class MyClass
{
}
$flags = uopz_flags(MyClass::class, '');
uopz_flags(MyClass::class, '', $flags & ~ZEND_ACC_FINAL);
var_dump((new ReflectionClass(MyClass::class))->isFinal());
?>
上の例の出力は以下となります。
bool(false)