Php 从Ajax访问私有静态类属性
我有一个类似的课程:Php 从Ajax访问私有静态类属性,php,ajax,singleton,Php,Ajax,Singleton,我有一个类似的课程: class My_Class { private static $array = null; private static $another_array = null; private function __construct() { self:$another_array = array( 'data' ); } // This gets executed from jQuery Ajax when user c
class My_Class {
private static $array = null;
private static $another_array = null;
private function __construct() {
self:$another_array = array( 'data' );
}
// This gets executed from jQuery Ajax when user clicks a button
public static function process_ajax() {
self::generate_html();
}
private static function generate_html() {
if ( ! self::$array ) {
self::$array = array( 'some data' );
}
}
// This gets executed when user is trying to save Ajax generated form
public static function save_ajax_form() {
print_r( self::$another_array ); // prints [0] => 'data'
self::validate_data();
}
private static function validate_data() {
// WHY DOES THIS EVALUATE TRUE?
if ( ! is_array( self::$array ) ) {
}
}
}
如何从Ajax调用中访问My_Class::$array属性?显然,您可以将范围声明从
private
更改为public
,或者如果要保持私有,请添加公共访问器:
public function getArray()
{
self::process_ajax();
return self::$array;
}
显然,您可以将范围声明从
private
更改为public
,或者如果您想保持私有,请添加公共访问器:
public function getArray()
{
self::process_ajax();
return self::$array;
}
显然,您可以将范围声明从
private
更改为public
,或者如果您想保持私有,请添加公共访问器:
public function getArray()
{
self::process_ajax();
return self::$array;
}
显然,您可以将范围声明从
private
更改为public
,或者如果您想保持私有,请添加公共访问器:
public function getArray()
{
self::process_ajax();
return self::$array;
}
即使您正在声明变量
static
它将在每个请求上被初始化为null
——PHP是“无状态”的,这样静态变量就不会在每个请求中持久存在。由于您确实希望保留该值,因此需要使用类似于$\u SESSION
、APC
或memcached
的内容来保存$array
的值
当ajax调用save\u ajax\u form()
时,它会立即调用validate\u data()
。由于对generate_html()
的调用发生在不同的请求中,因此$array
变量仍初始化为null,因此检查它是否为数组将返回true
请参阅:即使您在每个请求上声明变量
static
它将被初始化为null
——PHP是“无状态的”,这样,静态变量就不会在跨请求时持久存在。由于您确实希望保留该值,因此需要使用类似于$\u SESSION
、APC
或memcached
的内容来保存$array
的值
当ajax调用save\u ajax\u form()
时,它会立即调用validate\u data()
。由于对generate_html()
的调用发生在不同的请求中,因此$array
变量仍初始化为null,因此检查它是否为数组将返回true
请参阅:即使您在每个请求上声明变量
static
它将被初始化为null
——PHP是“无状态的”,这样,静态变量就不会在跨请求时持久存在。由于您确实希望保留该值,因此需要使用类似于$\u SESSION
、APC
或memcached
的内容来保存$array
的值
当ajax调用save\u ajax\u form()
时,它会立即调用validate\u data()
。由于对generate_html()
的调用发生在不同的请求中,因此$array
变量仍初始化为null,因此检查它是否为数组将返回true
请参阅:即使您在每个请求上声明变量
static
它将被初始化为null
——PHP是“无状态的”,这样,静态变量就不会在跨请求时持久存在。由于您确实希望保留该值,因此需要使用类似于$\u SESSION
、APC
或memcached
的内容来保存$array
的值
当ajax调用save\u ajax\u form()
时,它会立即调用validate\u data()
。由于对generate_html()
的调用发生在不同的请求中,因此$array
变量仍初始化为null,因此检查它是否为数组将返回true
请参阅:您确定问题出在访问私有属性而不是私有方法上吗?@doublesharp好吧,代码一直执行到if语句,我在这里检查它是否是一个数组。您必须查看整个代码才能了解它为什么会这样做,但是一般来说,私有方法应该只有在类内调用时才可访问。由于PHP是PHP,您实际上可以从该类的任何实例访问私有方法,在Java等语言中,它将是该对象的特定实例。@doublesharp用更多代码编辑了我的问题您没有调用
generate\u html()
,因此$array
为空,而不是数组。你确定问题在于访问私有属性而不是私有方法吗?@doublesharp好吧,代码一直执行到if语句,我在这里检查它是否是数组。你必须查看整个代码才能了解它为什么会这样做,但是一般来说,私有方法应该只有在类内调用时才可访问。由于PHP是PHP,您实际上可以从该类的任何实例访问私有方法,在Java等语言中,它将是该对象的特定实例。@doublesharp用更多代码编辑了我的问题您没有调用generate\u html()
,因此$array
为空,而不是数组。你确定问题在于访问私有属性而不是私有方法吗?@doublesharp好吧,代码一直执行到if语句,我在这里检查它是否是数组。你必须查看整个代码才能了解它为什么会这样做,但是一般来说,私有方法应该只有在类内调用时才可访问。由于PHP是PHP,您实际上可以从该类的任何实例访问私有方法,在Java等语言中,它将是该对象的特定实例。@doublesharp用更多代码编辑了我的问题您没有调用generate\u html()
,因此$array
为空,而不是数组。你确定问题是访问私有属性而不是私有方法吗?@doublesharp嗯,代码一直执行到if语句,我在这里检查它是否是数组