对于给定的类,我无法访问类外的公共变量。我想访问类外的变量有效负载和$_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'));
答案 0 :(得分:0)
我认为您对过滤器的工作方式以及实际执行代码的时间感到困惑。
在方法payload
运行之前,您的属性show_data
不会被设置,并且在触发操作wp_ajax_nopriv_show_data
之前不会发生这种情况。 (通过访问正确的ajax URL)。
由于该对象仅在该请求期间存在,因此您的payload
属性只能在同一方法中访问。