Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从Ajax访问私有静态类属性_Php_Ajax_Singleton - Fatal编程技术网

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语句,我在这里检查它是否是数组