ugrás a tartalomhoz

lehet modositani tomb tipusu statikus valtozot?

carstepPCE · 2008. Dec. 16. (K), 12.28
Udv Mindenkinek,

egy erdekes dilemmaba futottam bele 5.2.6-s PHP-nal, szerettem volna kihasznalni a 5-s php adta lehetosegeket es statikus osztalyt szeretnek letrehozni adatbazis kapcsolatok kezelesehez. Egy script futasaban akar tobb adatbazishoz is kapcsolodhatok.Gondoltam letrehozok egy statikus tombot nekik,de amikor tesztelni akartam, azt a hibauzenetet kaptam, hogy Arrays are not allowed in class constants. Hat akarhogy neztem a php dokumentaciojat sehol sem talaltam arra utasitast, hogy statikus valtozo nem lehet tomb tipusu.:

Teszt kod, amit hasznaltam:

require_once( "config.php" );
require_once( "DBConnection.php" );

DBConnection::init();

DBConnection::loadConnection('transaction');
DBConnection::loadConnection('filters');

var_dump( DBConnection::$_db );
DBConnection::destroy();

class DBConnection {

	static $_db = array();

	private static function init(){
		if ( !class_exists( 'staticDBConfig' ) ) {
			define("DS",DIRECTORY_SEPARATOR);
			$filename = 'incl' . self::DS . 'config.php';
			if ( file_exists( $filename ) ) {
				include( $filename );
			} else {
				die( 'No config file exists' );
			}
		}
	}

	public static function addConnection( $connectionname ) {
		if ( ! empty( $connectionname ) && ! isset( self::$_db[$connectionname] ) ) {
			if ( ! class_exists(staticDBConfig) ) {
				staticDBConfig::getConnection($connectionname);
				self::$_db[$connectionname] = self::mysql_pdo_connect(staticDBConfig::$settings);
			}
		}

		return self::$_db[$connectionname];
	}

	public static function loadConnection( $connectionname ) {
		if ( !isset( self::$_db[$connectionname] ) ) {
			self::addConnection($connectionname);
		}

		return self::$_db[$connectionname];
	}

	/**
	 * PDO connection method. We pass a string parameter to select which database we want to connect to,
	 * We load based on this parameter the configuration properties for the connection.
	 * If port property is define we use it to be specific to this.
	 *
	 * @param string $connectionprops, which database to connect to
	 * @return PDO connectin resource of false
	 */
	public static function mysql_pdo_connect($connectionprops) {
		$config = $connectionprops;
		$conn = NULL;
		try {
			if (isset ( $config ['port'] ) && ! empty ( $config ['port'] ))
				$conn = new PDO ( 'mysql:host=' . $config ['host'] . ';port=' . $config ['port'] . ';dbname=' . $config ['database'] . ';', $config ['login'], $config ['password'] );
			else
				$conn = new PDO ( 'mysql:host=' . $config ['host'] . ';dbname=' . $config ['database'] . ';', $config ['login'], $config ['password'] );
		} catch ( PDOException $e ) {
			die ( "Could not connect to db!" );
			// ( $e->getMessage (), 1 );
		}

		return $conn;
	}

	public static function destroy(){
		foreach( self::$_db as $key => $item ) {
			self::$_db[$key] = null;
			unset( self::$_db[$key]);
		}
	}
}

class staticDBConfig {
	const _default	= array ('driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => '****', 'password' => '*****', 'database' => '****_full', 'port' => '3307', 'prefix' => '' );
	const _default2	= array ('driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => '****', 'password' => '*****', 'database' => '*****', 'port' => '3307', 'prefix' => '' );
	const _default3	= array ('driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => '****', 'password' => '*****', 'database' => '****', 'port' => '3307', 'prefix' => '' );
	const _default4	= array ('driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => '***', 'password' => '***', 'database' => '*****', 'port' => '3307', 'prefix' => '');
	const _default5	= array ('driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => '****', 'password' => '****', 'database' => '******_main', 'port' => '3307', 'prefix' => '');

	static public $settings;

	public static function getConnection( $name ) {
		switch ( $name ) {
			case "service"		: self::$settings = self::_default2; break;
			case "service3"		: self::$settings = self::_default3; break;
			case "transaction"	: self::$settings = self::_default4; break;
			case "filters"		: self::$settings = self::_default5; break;
			default				: self::$settings = self::_default;
		}
	}

	public static function getDetail( $detailProperty ) {
		if ( empty( $detailProperty ) ) {
			return self::$settings;
		} else {
			if ( isset( self::$settings[$detailProperty] ) ) {
				return self::$settings[$detailProperty];
			} else {
				return false;
			}
		}
	}
}
A segitsegeteket kerem, hatha valamit nagyon elneztem a statikus valtozokkal kapcsolatban?

koszi
-cs-
Sanyi
 
1

maga a konstans nem lehet tömb

gex · 2008. Dec. 16. (K), 12.52
Only scalar data (boolean, integer, float and string) can be contained in constants.

forrás
2

igazabol ez nem valasz a kerdesemre

carstepPCE · 2008. Dec. 16. (K), 12.58
vagy ezek szerint a statikus valtozo konstansnak szamit PHP-ban, akkor a singleton pattern sem mukodne?

-cs-
Sanyi
3

igazad van!

carstepPCE · 2008. Dec. 16. (K), 13.36
hat elegge reggel van meg, es nem ittam meg a teamat, ugyhogy elnezest mindenkitol, aki megnezte a problememat.

Hat nem rossz fajlt neztem vegig :-)

-cs-
Sanyi