Completed
Push — master ( d3a073...5737c8 )
by Greg
02:21
created

src/Collection/Temporary.php (3 issues)

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