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?
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?
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;
}