Completed
Push — master ( 8b8afe...5f2bbe )
by Greg
02:21
created

src/Collection/Temporary.php (3 issues)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Robo\Collection;
4
5
/**
6
 * The temporary collection keeps track of the global collection of
7
 * temporary cleanup tasks in instances where temporary-generating
8
 * tasks are executed directly via their run() method, rather than
9
 * as part of a collection.
10
 *
11
 * In general, temporary-generating tasks should always be run in
12
 * a collection, as the cleanup functions registered with the
13
 * Temporary collection will not run until requested.
14
 *
15
 * Since the results could be undefined if cleanup functions were called
16
 * at arbitrary times during a program's execution, cleanup should only
17
 * be done immeidately prior to program termination, when there is no
18
 * danger of cleaning up after some unrelated task.
19
 *
20
 * An application need never use Temporary directly, save to
21
 * call Temporary::wrap() inside loadTasks or loadShortcuts, and
22
 * to call Temporary::complete() immediately prior to terminating.
23
 * This is recommended, but not required; this function will be
24
 * registered as a shutdown function, and called on termination.
25
 */
26
class Temporary
27
{
28
    private static $collection;
29
30
    /**
31
     * Provides direct access to the collection of temporaries, if necessary.
32
     */
33
    public static function getCollection()
34
    {
35
        if (!static::$collection) {
0 ignored issues
show
Since $collection is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $collection to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
36
            static::$collection = \Robo\Robo::getContainer()->get('collection');
0 ignored issues
show
Since $collection is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $collection to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
37
            register_shutdown_function(function () {
38
                static::complete();
39
            });
40
        }
41
42
        return static::$collection;
0 ignored issues
show
Since $collection is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $collection to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
43
    }
44
45
    /**
46
     * Call the complete method of all of the registered objects.
47
     */
48
    public static function complete()
49
    {
50
        // Run the collection of tasks. This will also run the
51
        // completion tasks.
52
        $collection = static::getCollection();
53
        $collection->run();
54
        // Make sure that our completion functions do not run twice.
55
        $collection->reset();
56
    }
57
}
58