PHP Constant Arrays: Is It Possible?

  • Context: PHP 
  • Thread starter Thread starter John Creighto
  • Start date Start date
  • Tags Tags
    Arrays Constant Php
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
1 reply · 4K views
John Creighto
Messages
487
Reaction score
2
I was wondering if was possible to create a constant array in php so it doesn't have to be reinitialized each time you enter a function. I guess one solution is to make it global but from a code maintenance perspective it makes since to put the array in with the function that uses it.
 
Physics news on Phys.org
If I understand your question correctly, you might be looking for a static variable.
I used it myself in the following two constructions (incidentally, from the same file, so I'll post them both):

PHP:
	function connect_db() {	
		static $theDatabase = null;
		if(!$theDatabase) {
			global $databaseProperties;
			include("database.php");
			$theDatabase = new db($databaseProperties['dbname'], $databaseProperties['host'], $databaseProperties['user'], $databaseProperties['password'], $databaseProperties['persist']);
		}
		return $theDatabase;
	}

	function getLanguageList() {
		static $languageList = null;
		global $db;
		if($languageList === null) {
			if(!$db) $db = connect_db();
			$languageList = $db->q("column SHOW COLUMNS FROM `TranslatedStrings`");
		}
		return $languageList;
	}

In both functions, the static variable only exists within the function, but not outside it. The value is kept between calls however. For example, I can call connect_db() as much as I like. The first time, it will create a new database handle, store it in the static variable and give it to me. However, every next time I call the function, it will see that the variable has already been assigned and will just return the value.

The second example is more similar to your question, that's why I included it. The first time, an array is initialized with some values from a database, a relatively slow operation. After that however, the function basically does nothing but "return $languageList;" where $languageList has the value from the first call.