php / php/php-src

do_operation ZEND_BOOL_NOT not invoked

オープン
#13,867 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Bug Status: Needs Triage
主要言語
C
スター
40.4k
フォーク
8.1k
平均マージ
2日 13時間
マージ済み PR(30日)
96

説明

Description

The object handler do_operation is not invoked for the opcode ZEND_BOOL_NOT.

With the supporting code for PHP 8.2 ext/zend_test https://github.com/ranvis/php-src/commit/2c542eef94de90b20b6e8d86ebeafee5408b12c9,
the following code:

<?php
$a = new DoOperationNoCast(5);
var_dump(!$a);

Resulted in this output:

bool(false)

But I expected this output instead:

object(DoOperationNoCast)#2 (1) {
  ["val":"DoOperationNoCast":private]=>
  int(0)
}

The code !$obj is evaluated as !(bool)$obj instead.
This appears to have been introduced on PHP 7.0, the commit https://github.com/php/php-src/commit/e6180ebb640408c7ded804f5f65282122a059ddb.

PHP Version

dev-PHP-8.2

Operating System

irrelevant

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、PHP インタープリターによる ZEND_BOOL_NOT opcode とオブジェクトハンドラー do_operation の処理を追跡します。その際、ext/zend_test のサポートコードとリンクされた PHP 7.0 の変更をコンテキストとして使用します。提供されている DoOperationNoCast の例を PHP 8.2 で実行し、ハンドラーが呼び出され、結果が期待されるオブジェクト出力と一致することを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
c, php
領域
compilers
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。