DEV Community

Cover image for Code Smell 93 - Send me Anything
Maxi Contieri
Maxi Contieri

Posted on • Originally published at

Code Smell 93 - Send me Anything

Magic functions that can receive a lot of different (and not polymorphic arguments)

TL;DR: Create a clear contract. Expect just one protocol.


  • Fail Fast principle violation

  • Error prune

  • Readability

  • If polluting

  • Nulls

  • Bad Cohesion


  1. Take just one "kind" of input

  2. Arguments should adhere to a single protocol.

Sample Code



function parseArguments($arguments) {
    $arguments = $arguments ?: null;
    //Always the billion-dollar mistake
    if (is_empty($arguments)) {
        $this->arguments = http_build_query($_REQUEST);
        //Global coupling and side effects
    } elseif (is_array($arguments)) {
        $this->arguments = http_build_query($arguments);
    } elseif (!$arguments) { //null unmasked
        $this->arguments = null;
    } else {
        $this->arguments = (string)$arguments;
Enter fullscreen mode Exit fullscreen mode



function parseArguments(array $arguments) {
    $this->arguments = $arguments;
    //much cleaner, isn't it ?
Enter fullscreen mode Exit fullscreen mode


We can detect this kind of methods when they do different things, asking for the argument kind


  • If Polluter


Magic castings and flexibility have a price. They put the rubbish under the rug and violate fail fast principle.



Photo by Hennie Stander on Unsplash

Referential transparency is a very desirable property: it implies that functions consistently yield the same results given the same input, irrespective of where and when they are invoked.

Edward Garson

This article is part of the CodeSmell Series.

Top comments (1)

loucyx profile image
Lou Cyx

You might want to correct your tags, the post is about #PHP and you used #javascript.