Alysson,
The variables $conexao
and $cliente
must be imported into the function as a whole:
function mostrarCliente() {
global $cliente, $conexao;
$cliente = $conexao->selectCliente("_ID=10");
// (...)
I would transform the function into actually a function, that is, it takes parameter and returns values, the number of lines would be smaller and the code more elegant and dynamic, see:
<?php
include_once '../model/Cliente.php';
include_once '../DAO/Conexao.php';
$conexao = new Conexao();
$cliente = new Cliente();
/**
* @param string Recebe nome do método
* @return string
*/
function dadoCliente($get)
{
$cliente = $conexao->selectCliente("_ID=10");
//Se não estiver nulo, então nome recebe nome do cliente
if (!empty($cliente))
{
return $cliente->$get();
}
return "";
}
?>
<!-- Texto e caixa - NOME CLIENTE -->
<label>Nome Cliente</label><br />
<input type="text" name="nome" size="80px" value="<?php echo dadoCliente('getNome'); ?>" /><br />
<!-- Texto e caixa - NOME FANTASIA -->
<label>Nome Fantasia</label><br />
<input type="text" name="nome-fantasia" size="80px" value="<?php echo dadoCliente('getFantasia'); ?>" /><br />
Tip 1
Instead of creating a function whenever displaying data from a client (or other object), you can implement an abstract base class (abstract
) with methods in common with their objects such as getNome
, getEndereco
and then create a child class (ex.: Cliente
) which will extend the base class, however, this, with its own properties and methods, example:
class.cliente.base.php
<?php
public class ClientesBase
{
function __construct($id)
{
$this->id = $id;
// restante do código para setar um cliente como query SQL,
// etc (que pode inclusive seguir o Query Pattern)
}
function getNome() { /* código que recebe o nome */ }
function getFantasia() { /* código que recebe o a fantasia */ }
}
?>
class.cliente.php
<?php
public class Cliente extends ClientesBase
{
function getEndereco() { /* código que recebe o endereço */ }
}
?>
exibe_cliente.php
<?php
include_once '../model/class.cliente.php';
include_once '../DAO/Conexao.php';
$conexao = new Conexao();
$cliente = new Cliente(10); // onde 10 é o ID
?>
<!-- Texto e caixa - NOME CLIENTE -->
<label>Nome Cliente</label><br />
<input type="text" name="nome" size="80px" value="<?php echo $cliente->getNome; ?>" /><br />
<!-- Texto e caixa - NOME FANTASIA -->
<label>Nome Fantasia</label><br />
<input type="text" name="nome-fantasia" size="80px" value="<?php echo $cliente->getFantasia; ?>" /><br />
Tip 2
Your connection can (in fact, it’s highly recommended) follow the Pattern Singleton
, whose goal is to instantiate only once and this will be available for ALL application.
Singleton Pattern example for Mysql connection
class.database.php
<?php
/*
* Mysql database class - somente uma conexão é permitida
*/
class Database {
private $_connection;
private static $_instance; //The single instance
private $_host = "HOSTt";
private $_username = "USERNAME";
private $_password = "PASSWORd";
private $_database = "DATABASE";
/*
Get an instance of the Database
@return Instance
*/
public static function getInstance() {
if(!self::$_instance) { // If no instance then make one
self::$_instance = new self();
}
return self::$_instance;
}
// Constructor
private function __construct() {
$this->_connection = new mysqli($this->_host, $this->_username,
$this->_password, $this->_database);
// Error handling
if(mysqli_connect_error()) {
trigger_error("Failed to conencto to MySQL: " . mysql_connect_error(),
E_USER_ERROR);
}
}
// Magic method clone is empty to prevent duplication of connection
private function __clone() { }
// Get mysqli connection
public function getConnection() {
return $this->_connection;
}
}
?>
Use demo of Singleton above
<?php
$db = Database::getInstance();
$mysqli = $db->getConnection();
$sql_query = "SELECT foo FROM .....";
$result = $mysqli->query($sql_query);
?>
In your case then, could get the connection:
<?php
include_once '../model/Cliente.php';
include_once '../DAO/class.database.php';
$db = Database::getInstance();
$conexao = $db->getConnection();
$cliente = new Cliente();
// (...)
Just remembering that when using function the external variables are not the same as the internal ones, that is, the variable $name and $fantasia has value of "" in the file, but within the function they are null, because they are different variables.
– Pedro Soares