Volans Posted June 24, 2012 Report Share Posted June 24, 2012 Boas, Eu comecei à relativamente pouco tempo a tentar trabalhar com classes e já vi o quão simples elas são e o quão simples tornam o nosso trabalho. Mas eu tenho um problema... Imaginemos o seguinte: File template.class.php: <?php class Template { function display($tpl_name) { $tpl_path = "templates/" . $tpl_name . ".php"; if(file_exists($tpl_path)) include($tpl_path); else echo 'ERRO: Problema ao inicializar o template. O ficheiro não existe!'; } } $tpl = new Template; ?> File index.php <?php include('template.class.php'); $tpl->display(header); $tpl->display(content); /* com uma condiçao que não vou meter agora */ $tpl->display(footer); ?> File content.php <?php include('class.template.php'); $tpl->display(inicio_exemplo); ?> Quando eu chamava o ficheiro class.template.php no content.php ele ia dar erro porque estava a redeclarar a classe... Como é que posso contornar esse erro e fazer com que apenas seja necessário chamar a class.template.php uma única vez? Cumpz Link to comment Share on other sites More sharing options...
tiagotavares Posted June 24, 2012 Report Share Posted June 24, 2012 Boas, Em vez de include usa require_once require_once('class.template.php'); Espero ter ajudado Tiago Tavares Link to comment Share on other sites More sharing options...
Volans Posted June 24, 2012 Author Report Share Posted June 24, 2012 Dá-me este erro se eu fizer com o require_once(): Fatal error: Call to a member function display() on a non-object in C:\xampp\htdocs\Templates\inicio.php on line 6 Se utilizar o include(): Fatal error: Cannot redeclare class Template in C:\xampp\htdocs\Includes\class.template.php on line 4 Não há uma maneira de ter que chamar o ficheiro apenas uma vez, num só ficheiro e utilizar depois noutros ficheiros? Tipo interligar os ficheiros... Eu já vi isso em diversos sistemas feitos em PHP mas não sei fazer... Link to comment Share on other sites More sharing options...
Volans Posted June 24, 2012 Author Report Share Posted June 24, 2012 Achas que poderia utilizar esta função para fazer o que quero?: <?php function __autoload($class_name) { include_once ($class_name); } ?> Se sim, como o faria exatamente? Link to comment Share on other sites More sharing options...
taviroquai Posted June 25, 2012 Report Share Posted June 25, 2012 Regra geral, apenas no index.php incluis (require_once) todas as classes que precisas; isto sem autoload. Pelo que percebi pelo teu código, queres incluir o ficheiro content.php dentro da class Template. Todos os ficheiros que incluis dentro do método display, ficam limitados ao escopo desse método; ou seja, se quiseres chamar a classe Template, ou a variavel $tpl, deves usar: $this->display('inicio_exemplo'); // isto pode entrar em recursividade infinita, cuidado! Seja como for, precisas passar dados dinâmicos para esses templates e uma forma de alcançares isso é (um método bastante usado): ... function display($tpl_name, $dados = array()) { $tpl_path = "templates/" . $tpl_name . ".php"; if(file_exists($tpl_path)) { extract($dados); include($tpl_path); } else echo 'ERRO: Problema ao inicializar o template. O ficheiro não existe!'; } ... Link to comment Share on other sites More sharing options...
Volans Posted June 25, 2012 Author Report Share Posted June 25, 2012 Já percebi. Mais tarde vou experimentar. Muito obrigado pela ajuda! (: Link to comment Share on other sites More sharing options...
Volans Posted June 25, 2012 Author Report Share Posted June 25, 2012 Funcionou perfeitamente!! Muito obrigado!! 😄 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now