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

已关闭
belliash2018-07-21 15:14:21 +02:00创建 · 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?
belliash2018-07-21 18:37:17 +02:00 添加了标签
bug
belliash2018-07-22 19:08:59 +02:00 指派给自己
belliash2018-07-22 21:43:07 +02:00 关闭此工单
belliash2018-07-28 19:22:06 +02:00 指派给自己
登录 并参与到对话中。
未选择里程碑
未指派成员
2 名参与者
通知
到期时间
到期日期无效或超出范围。请使用 'yyyy-mm-dd' 格式。

未设置到期时间。

依赖工单

没有设置依赖项。

参考:aerscript/Aer#13
没有提供说明。