Variable no inicializada en php

Z

Esto es basico de poo,pero porque en el constructor si estan inicializadas las variables que cargo desde el ini y en la funcion connect no lo estan???

<?php
	class Db_handler{
		private $driver;
		private $host;
		private $port;
		private $schema;
		private $username;
		private $password;

	function Db_handler( $config_file = 'connection.ini' ){
		if(!$connection_data = parse_ini_file($config_file, true)) throw new exception("No se puedo abrr el fichero de configuracion ".$config_file." .");
		$driver = $connection_data["database"]["driver"];
		$host = $connection_data["database"]["host"];
		$port = $connection_data["database"]["port"];
		$schema = $connection_data["database"]["schema"];
		$username = $connection_data["database"]["username"];
		$password = $connection_data["database"]["password"];

		echo $host;
		echo $username;
		echo $password;
	}

	function connect(){
		$link = mysql_connect($host, $username, $root)
			or die('No se pudo conectar: ' . mysql_error());
	}

}
?>

falla al llamar a la funcion en ,si pongo literales en connect en lugar de las variables si funciona

$app->get(
    '/get',
    function () use($app){
        $db = new Db_handler;
        $db->connect();
    }
);
Merkury

Que error te tira?

1 respuesta
Z

#2
Undefined variable: host y estan las tres no definidas $host, $username y $root

1 respuesta
Merkury

#3 Una cosa, donde tienes el constructor?

1 respuesta
Z

#4 El constructor es function Db_handler ,no??es la funcion que se llama como la clase, yo me guío por lo que pone en la documentación de php http://php.net/manual/es/oop4.constructor.php, no estoy mu puesto en php pero pensaba que se ponia __contruct pero al ver esto en la documentación oficial...

1 respuesta
Vashealer

Para poner un constructor se pone con __construct() :

   function __construct() {
       print "En el constructor BaseClass\n";
   }

Es posible que no se esté llamando la función Db_handler y por eso no están inicializadas correctamente.

PD: usa el "$this->" para referirte a variables/objetos/funciones de esa clase.

1 respuesta
Z

#6 Si sellama porque los echos que puse si se muestran

1 respuesta
Vashealer

#7 pero estás declarando esas variables en la función, no estás accediendo a las variables de tu clase. Utiliza el $this-> dentro de la función Db_handler para acceder a $host/ $username / $password.

pd : échale un ojo a http://php.net/manual/es/language.oop5.visibility.php

1
Merkury

#5 Colega estas mirando la referencia de PHP4!

El constructor en PHP5 es public function __construct()

http://php.net/manual/en/language.oop5.decon.php

1 respuesta
Vashealer

#9 igualmente no accede con el $this-> así que lo que estaba haciendo era declararlas en el scope de la función

1 respuesta
Merkury

#10 Ya, ya.

Z

Arreglado ,gracias.

Usuarios habituales