Issues (2)

src/Module/Ajax_Middleware.php (1 issue)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * Ajax Dispatcher Middleware
7
 *
8
 * @since 0.1.0
9
 * @author Glynn Quelch <[email protected]>
10
 * @license http://www.opensource.org/licenses/mit-license.html  MIT License
11
 * @package PinkCrab\Ajax
12
 */
13
14
namespace PinkCrab\Ajax\Module;
15
16
use PinkCrab\Ajax\Ajax;
0 ignored issues
show
This use statement conflicts with another class in this namespace, PinkCrab\Ajax\Module\Ajax. Consider defining an alias.

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...
17
use PinkCrab\Ajax\Dispatcher\Ajax_Dispatcher;
18
use PinkCrab\Perique\Interfaces\Registration_Middleware;
19
20
21
class Ajax_Middleware implements Registration_Middleware {
22
23
	public Ajax_Dispatcher $dispatcher;
24
25
	public function __construct( Ajax_Dispatcher $dispatcher ) {
26
		$this->dispatcher = $dispatcher;
27
	}
28
29
	/**
30
	 * Add all valid ajax calls to the dispatcher.
31
	 *
32
	 * @param object $class_instance
33
	 * @return object
34
	 */
35
	public function process( object $class_instance ): object {
36
		if ( is_a( $class_instance, Ajax::class )
37
		&& is_admin()
38
		&& wp_doing_ajax()
39
		) {
40
			$this->dispatcher->add_ajax_call( $class_instance );
41
		}
42
		return $class_instance;
43
	}
44
45
	public function setup(): void {
46
		/*noOp*/
47
	}
48
49
	/**
50
	 * Register all ajax calls.
51
	 *
52
	 * @return void
53
	 */
54
	public function tear_down(): void {
55
		$this->dispatcher->execute();
56
	}
57
}
58