无法在wordpress中访问类外的公共变量

时间:2017-03-23 12:18:23

标签: php wordpress oop

对于给定的类,我无法访问类外的公共变量。我想访问类外的变量有效负载和$_GLOBALS['te'],但它提供NULL值。

当我在show_data()内打印有效负载变量时,它应该显示类外的有效负载值,它返回正确的值。

<?php

class google_api
{
    public $test;
    public $payload;
    public $id_token;


    function add_platform_script()
    {
        wp_enqueue_script('platform_scr', 'https://plus.google.com/js/client:platform.js', false);
        wp_enqueue_script('handler_callback', plugins_url('../js/google_sign.js', __FILE__), false);
        add_action('wp_enqueue_scripts', array ($this, 'add_platform_script'), 1);
        wp_localize_script('handler_callback', 'show_vfr', array ('ajaxurl' => admin_url('admin-ajax.php')));
    }

    public function add_api_js()
    {
        $this->add_platform_script();
        echo
        '<meta name="google-signin-client_id" content="MY CLIENT ID"><div class="g-signin2"
                                                                  data-scope="profile email"
                                                                  data-onsuccess="onSignIn"
                                                                  data-onfailure="onSignInFailure"> </div>';
        $GLOBALS['te'] = 'helloee';
    }

    function show_data($client)
    {
        if (isset($_POST['Token'])) {
            $this->id_token = $_POST['Token'];
            $CLIENT_ID      = 'MY CLIENT ID';
            $client         = new Google_Client(['client_id' => $CLIENT_ID]);

            $this->payload = $client->verifyIdToken($this->id_token);
            if ($this->payload) {
                $user_email = $this->payload['email'];
                if (email_exists($user_email)) {
                    $user = get_user_by('email', $user_email);
                    if ($user) {
                        wp_set_current_user($user->ID, $user->user_login);
                        wp_set_auth_cookie($user->ID);
                        do_action('wp_login', $user->user_login);
                        die('1');
                    }
                } else {
                    die('2');
                }
            } else {
                echo 'INVALID TOKEN ISSUED [ERR 005]'; // Invalid ID token
            }
        } else {
            echo 'INVALID USER';
        }
    }

}

$foo = new google_api();
add_action('google_button_form', array ($foo, 'add_api_js'));
var_dump($foo->payload);
var_dump($GLOBALS['te']);
add_action('wp_ajax_nopriv_show_data', array ($foo, 'show_data'));

1 个答案:

答案 0 :(得分:0)

我认为您对过滤器的工作方式以及实际执行代码的时间感到困惑。

在方法payload运行之前,您的属性show_data不会被设置,并且在触发操作wp_ajax_nopriv_show_data之前不会发生这种情况。 (通过访问正确的ajax URL)。

由于该对象仅在该请求期间存在,因此您的payload属性只能在同一方法中访问。