9

現在の Travis-CI PHP7 ビルドは、次のコードを実行すると次のエラーをスローします。

PHP 7 致命的なエラー: static::class はコンパイル時のクラス名解決に使用できません

trait EloquentValidatingTrait
{
    // Some declarations skipped
/**
 * Eloquent will call this on model boot
 */
public static function bootEloquentValidatingTrait()
{
    // Calling Model::saving() and asking it to execute assertIsValid() before model is saved into database
    $savingCallable = [static::class, 'saving'];
    $validationCallable = [static::class, 'assertIsValid'];
    forward_static_call($savingCallable, $validationCallable);
}

それは一時的なバグですか、それとも私が見逃した将来の機能ですか? このRFCの下の注記には、動作するはずであると記載されています (5.5 および 5.6 でも動作します)。

4

1 に答える 1

7

http://git.php.net/?p=php-src.git;a=commitdiff;h=1d3f77d13d2b457bdf1bc52045da4679741e65cbでこのバグを修正しました

間違いは単純でした...コンパイル時に定数解像度の最適化でモードを強制的に成功または強制終了するように設定しました(関数呼び出しの単純なブール値)。そのモードは、静的な式に必要です (like const FOO = static::class;must fail)。

それをゼロに設定すると、正常に動作します。修正するには、最新のマスターをプルするだけです。

于 2015-06-03T22:03:31.053 に答える