Eu estava lendo esta pergunta no stackoverflow:
/programming/104516/calling-php-functions-within-heredoc-strings
e a resposta aceita diz para criar modelos PHP simples como este:
template.php:
<html> <head> <title><?=$title?> </title> </head> <body> <? = getContent ()?> </body> </html>
index.php:
<? php $ title = 'Título da demonstração'; função getContent () { retornar '<p> Olá mundo! </p>'; } include ('template.php'); ?>
Para mim, o exposto acima não está bem estruturado no sentido de que o template.php depende de variáveis definidas em outros scripts. E você está usando um include () para executar o código quando o faz include('template.php')
(ao contrário de include () para incluir uma classe ou uma função que não é executada imediatamente).
Eu sinto que uma abordagem melhor é envolver seu modelo dentro de uma função:
template.php:
<? php modelo de função ($ title, $ content) { ob_start (); ?> <html> <head> <title><?=$title?> </title> </head> <body> <? = $ content?> </body> </html> <? php return ob_get_clean (); } ?>
index.php:
<? php require_once ('template.php'); print template ('Demo Title', '<p> Olá, mundo! </p>'); ?>
A segunda abordagem é melhor? Existe uma maneira ainda melhor de fazer isso?
extract($this->properties);
para extrair as propriedades em variáveis, imediatamente antes da instrução include.Um modelo sempre dependerá de variáveis externas e, com o PHP sendo uma linguagem dinâmica, não há como impor em tempo de compilação que eles estarão lá. Portanto, a primeira abordagem provavelmente está correta; ainda existem alguns problemas:
Uma abordagem muito direta é escrever uma função, de preferência com um nome muito curto, que cuide de ambas; chamando isso
_()
parece ser uma convenção comum. Uma versão simples pode ser assim:E então no seu modelo, você faria:
Mais coisas a fazer com a
_()
função:htmlspecialchars
chamada, nos casos em que você deseja passar HTML para ela em vez de cadeias brutas.Array
eObject
, em vez disso, algo significativo (ou string vazia).fonte
O primeiro
template.php
é mais fácil de carregar como está no dreamweaver / bluegriffon / o que for e editado por um web designer não experiente do lado do servidor, o segundo ... bem, ainda meio que poderia, mas é muito mais provável que ele se quebre durante o processo de edição .Eu iria com o primeiro para manter o aspecto de HTML com benefícios , da maneira que os designers de terceiros geralmente preferem.
fonte
Como o Codeigniter é minha estrutura favorita, proponho uma solução isenta de Codeigniter:
Seu modelo seria semelhante a:
E você a renderizaria instanciando a classe, passando dados em uma matriz como um parâmetro construtor e chamando o método 'render':
Dessa forma, você não está executando diretamente o código incluído e também mantendo seu modelo legível, para que os designers fiquem felizes.
fonte
Php não é uma linguagem de programação. Portanto, escrever com forte digitação não será possível se o seu idioma não tiver um sistema de tipos real. Mas você pode ajudar seu IDE, como PHP-Storm, a fazer o truque que deseja ...
Sua definição de visualização:
Seu arquivo de modelo:
fonte