/var/www/html_sp/wp-content/plugins/woocommerce/vendor/woocommerce/blueprint/src/UsePubSub.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php

namespace Automattic\WooCommerce\Blueprint;

trait 
UsePubSub {

    private array 
$subscribers = array();

    
/**
     * Subscribe to an event with a callback.
     *
     * @param string   $event The event name.
     * @param callable $callback The callback to execute when the event is published.
     * @return void
     */
    
public function subscribestring $event, callable $callback ): void {
        if ( ! isset( 
$this->subscribers$event ] ) ) {
            
$this->subscribers$event ] = array();
        }

        
$this->subscribers$event ][] = $callback;
    }

    
/**
     * Publish an event to all subscribers.
     *
     * @param string $event The event name.
     * @param mixed  ...$args Arguments to pass to the callbacks.
     * @return void
     */
    
public function publishstring $event, ...$args ): void {
        if ( ! isset( 
$this->subscribers$event ] ) ) {
            return;
        }

        foreach ( 
$this->subscribers$event ] as $callback ) {
            
call_user_func$callback, ...$args );
        }
    }

    
/**
     * Unsubscribe a specific callback from an event.
     *
     * @param string   $event The event name.
     * @param callable $callback The callback to remove.
     * @return void
     */
    
public function unsubscribestring $event, callable $callback ): void {
        if ( ! isset( 
$this->subscribers$event ] ) ) {
            return;
        }

        
$this->subscribers$event ] = array_filter(
            
$this->subscribers$event ],
            fn( 
$subscriber ) => $subscriber !== $callback
        
);

        if ( empty( 
$this->subscribers$event ] ) ) {
            unset( 
$this->subscribers$event ] );
        }
    }
}