TasksCollection::add()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
/**
3
 * Junty
4
 *
5
 * @author Gabriel Jacinto aka. GabrielJMJ <[email protected]>
6
 * @license MIT License
7
 */
8
 
9
namespace Junty\TaskRunner\Task;
10
11
use Junty\TaskRunner\Task\{Task, TaskInterface};
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Junty\TaskRunner\Task\Task.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
Bug introduced by
This use statement conflicts with another class in this namespace, Junty\TaskRunner\Task\TaskInterface.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
12
use Doctrine\Common\Collections\ArrayCollection;
13
14
class TasksCollection extends ArrayCollection
15
{
16
    /**
17
     * Registres a task
18
     *
19
     * @param string|TaskInterface $key
20
     * @param callable             $value
21
     */
22
    public function set($key, $value)
23
    {
24
        if ($value !== null && !is_callable($value)) {
25
            throw new \InvalidArgumentException('Callback must be callable.');
26
        }
27
28
        if (!is_string($key) && !$key instanceof TaskInterface) {
29
            throw new \InvalidArgumentException('Pass an instance of TaskInterface or a callback');
30
        }
31
32
        if ($key instanceof TaskInterface) {
33
            parent::set($key->getName(), $key);
34
            return;
35
        }
36
37
        parent::set($key, new Task($key, $value));
38
    }
39
40
    /**
41
     * Invalid method for task registration
42
     *
43
     * @param mixed $element
44
     *
45
     * @throws \BadMethodCallException
46
     */
47
    public function add($element)
48
    {
49
        throw new \BadMethodCallException('Use TaskCollection::set to register a task.');
50
    }
51
}