Method overloading leads to call first defined one if number of arguments does not match #13

已關閉
建立於 2018-07-21 15:14:21 +02:00belliash · 2 則評論
擁有者

Aer Information

  • Aer Version (or commit ref): d1b874b391
  • Operating System: Linux
  • System Architecture (eg. arm, x86_64, ...): x86_64

Your problem description

PH7 takes first method defined, if it does not match the arguments list.
This shows well below example, which defines 3 methods with the same name. Each of them takes different number of arguments.

<?php
    class Test {
        function a() {
            echo 'I take 0 arguments' . PHP_EOL;
        }
        function a($a) {
            echo 'I take 1 argument' . PHP_EOL;
        }
        function a($a, $b) {
            echo 'I take 2 arguments' . PHP_EOL;
        }
    };
    $t = new Test();
    $t->a();
    $t->a(1);
    $t->a(1, 2);
    $t->a(1, 2, 3);
?>

Should we treat this as a bug or as a feature?

Expected results

As PH7 does not emit any errors, expected output is:
I take 0 arguments
I take 1 argument
I take 2 arguments

Current results

Actual result is:
I take 0 arguments
I take 1 argument
I take 2 arguments
I take 0 arguments

<!-- 1. Please speak English, this is the language all of us can speak and write. 2. Please take a moment to check that your issue doesn't already exist. 3. Please give all relevant information below for bug reports, because incomplete details will be handled as an invalid report. --> # Aer Information - Aer Version (or commit ref): d1b874b391 - Operating System: Linux - System Architecture (eg. arm, x86_64, ...): x86_64 # Your problem description PH7 takes first method defined, if it does not match the arguments list. This shows well below example, which defines 3 methods with the same name. Each of them takes different number of arguments. <?php class Test { function a() { echo 'I take 0 arguments' . PHP_EOL; } function a($a) { echo 'I take 1 argument' . PHP_EOL; } function a($a, $b) { echo 'I take 2 arguments' . PHP_EOL; } }; $t = new Test(); $t->a(); $t->a(1); $t->a(1, 2); $t->a(1, 2, 3); ?> Should we treat this as a bug or as a feature? # Expected results As PH7 does not emit any errors, expected output is: I take 0 arguments I take 1 argument I take 2 arguments # Current results Actual result is: I take 0 arguments I take 1 argument I take 2 arguments I take 0 arguments
普通成員

This behaviour might lead to subtle bugs I think.

This behaviour might lead to subtle bugs I think.
作者
擁有者

I added variadic functions to the ideas for future releases. There are already a lot of things to do and I think we can skip this feature for now. I think P# should strictly match number of arguments for now, doesnt it?

I added variadic functions to the ideas for future releases. There are already a lot of things to do and I think we can skip this feature for now. I think P# should strictly match number of arguments for now, doesnt it?
belliash 加入了
bug
標籤 2018-07-21 18:37:17 +02:00
belliash 指派給自己 2018-07-22 19:08:59 +02:00
belliash 關閉了這個問題 2018-07-22 21:43:07 +02:00
belliash 指派給自己 2018-07-28 19:22:06 +02:00
登入 才能加入這對話。
2 參與者
通知
截止日期
未設定截止日期。
先決條件

未設定先決條件。

參考: aerscript/Aer#13
沒有提供描述。