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

Closed
opened 2018-07-21 15:14:21 +02:00 by belliash · 2 comments
Owner

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
Member

This behaviour might lead to subtle bugs I think.

This behaviour might lead to subtle bugs I think.
Author
Owner

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 added the
bug
label 2018-07-21 18:37:17 +02:00
belliash self-assigned this 2018-07-22 19:08:59 +02:00
belliash self-assigned this 2018-07-28 19:22:06 +02:00
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: aerscript/Aer#13
No description provided.