duan0818
2013-11-06 23:14
浏览 28

从Ajax访问私有静态类属性

I have a class similar to this:

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 ) ) {

        }

    }
}

How can I access My_Class::$array property from an Ajax call?

图片转代码服务由CSDN问答提供 功能建议

我有一个类似于此的类:

  class My_Class  {
 private static $ array = null; 
 private static $ another_array = null; 
 
 private function __construct(){
 self:$ another_array = array('data'); 
} 
 
  //当用户单击按钮时,这将从jQuery Ajax执行
公共静态函数process_ajax(){
 self :: generate_html(); 
} 
 
私有静态函数generate_html(){
 if(!  self :: $ array){
 self :: $ array = array('some data'); 
} 
} 
 
 //当用户试图保存生成的Ajax时,会执行此操作
 public  static function save_ajax_form(){
 print_r(self :: $ another_array);  // prints [0] =>  'data'
 self :: validate_data(); 
} 
 
私有静态函数validate_data(){
 //为什么这个评估为真?  
 if(!is_array(self :: $ array)){
 
} 
 
} 
} 
   
 
 

我如何访问< 来自Ajax调用的代码> My_Class :: $ array 属性?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • duanbishai5271 2013-11-06 23:56
    已采纳

    Even though you are declaring the variable static it is going to be initialized to null on every request - PHP is "stateless" in this way, static variables will not persist accross requests. Since you do want to persist the value you will need to use something like $_SESSION, APC or memcached to hold the value of $array.

    When your ajax calls save_ajax_form() it immediately then calls validate_data(). The $array variable is still initialized to null since the call to generate_html() happened in a different request, so the check to see if it is not an array will return true.

    See: Does static variables in php persist across the requests?

    点赞 评论
  • dselp3944 2013-11-06 23:21

    Obviously you could either change the scope declaration from private to public, or if you want to keep private, add a public accessor:

    public function getArray()
    {
        self::process_ajax();
    
        return self::$array;
    }
    
    点赞 评论

相关推荐 更多相似问题