2010-08-05 4 views
0

Я программирую по-старому - все еще использую функции, а не классы. Например, что-то основное я при создании основной шаблон для сайта помещается верхний и нижний колонтитулы в функции как и в файле functions.phpЧто такое подход класса php5?

<?php 
//header 
function outline_start() { 

echo ' 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>my site</title> 
</head> 
<body> 
'; 

} 

//footer 
function outline_end() { 
echo ' 
</body></html> 
'; 

} 
?> 

Затем в другом файле, как index.php I «d сделать следующее:

<?php 

include(functions.php); 

outline_start(); 

echo 'hello world'; 

outline_end(); 

?> 

Это может представлять вопросы безопасности мудр необходимости использовать глобальные переменные, мне сказали, и в целом это плохая практика - правильно?

Какая практика?

+6

узнать oop. Ваша жизнь будет вам благодарна. – Stephen

ответ

2

Лучшая практика может быть лучше всего определена командой, с которой вы работаете. Как я вижу это, у вас есть один из двух вариантов:

Вы можете префикс своих функций в виде «функции с этими префиксами для этих операций». Это похоже на то, что PHP делал какое-то время, то есть db_connect() и db_query(). Но на самом деле это очень похоже на то, что у вас уже есть (outline_start() и outline_end()).

Если вы хотите, чтобы инкапсулировать это в классе, вы можете:

class Outline { 
    function Start() { 
    //Code to echo here. Or, if you prefer, return the string. 
    } 

    function End() { 
    //Code to echo here. Or, if you prefer, return the string. 
    } 
} 

Однако, большинство людей рекомендовали бы использовать подход вид двигателя, или, по крайней мере, php_include вашего колонтитулов , Широко признано, что вы прилагаете все усилия, чтобы оставить HTML-код вашего PHP-кода. Это упрощает работу с CSS, стилем и JS позже, если вы входите в такие вещи. Поэтому, если целью ваших PHP-функций является действительно просто вернуть статический HTML, просто вставьте его в другой файл и не беспокойтесь о том, чтобы попробовать PHP5.

+0

Я вижу, вроде include (header.php).Скорее используйте классы для фактического материала и процессов, связанных с db? – willdanceforfun

+0

Это то, что я обычно делаю, KeenLearner. Идея о том, что ваш PHP выполняет логику, а не возвращает только HTML. – villecoder

1

Ваш заголовок упоминает «классы», поэтому я предполагаю, что вы заинтересованы в сравнении концепции ООП (объектно-ориентированного программирования) на основе «шаблона» на основе вашей функции.

Возможно, это будет не так просто сравнить эти два без какого-либо элементарного понимания ООП. Предполагая, что у вас есть основа, объектная система шаблонов будет иметь объект «view», который обрабатывает вывод шаблона. Были бы методы, используемые для назначения переменных и даже назначения самих шаблонов.

<?php 
//make the template variable name contain the value 'John' 
$view->assign('name', 'John'); 

//make color contain the value of $color 
$view->assign('color', $color); 

//use the 'user' template 
$view->setScript('user'); 

//display the template 
$view->render(); 
?> 

Теперь сам шаблон может использовать какой-то специальный язык шаблонов (например, Smarty) или, возможно, просто использовать родной PHP (как Zend_View). Он должен позволять включать подшаблоны либо путем назначения вывода подшаблона основному шаблону (например, это просто другая переменная шаблона), позволяя шаблонам включать другие шаблоны, либо использовать какой-либо макет, чтобы включить различные разделы контента.

Когда дело доходит до этого, большинство реализаций шаблонов ООП будут «включать» общие разделы, которые можно считать похожими на подход, который вы используете сейчас. Однако основное различие заключается в том, что методы ООП (или должны?) Имеют тенденцию отвлекать вас от смешивания вашего уровня представления (HTML) со всем остальным кодом.

Но есть много разнообразных двигателей шаблонов ООП - взгляните на некоторые из них и посмотрите, что они предлагают. Вы также можете взглянуть на шаблон проектирования mVC (Model-View-Controller).

Смежные вопросы