【问题标题】:What is a php5 classes approach to this?什么是 php5 类的方法?
【发布时间】:2010-08-05 00:51:07
【问题描述】:

我正在以旧方式编程 - 仍然使用函数而不是类。例如,我在为网站创建基本模板时所做的一些基本操作是将页眉和页脚放在一个函数中,就像在一个名为 functions.php 的文件中一样

<?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,我会执行以下操作:

<?php

include(functions.php);

outline_start();

echo 'hello world';

outline_end();

?>

我被告知需要使用全局变量,这可能会带来安全方面的问题,而且通常是不好的做法 - 对吧?

最佳做法是什么?

【问题讨论】:

  • 学习 oop。你的生活会感谢你。

标签: php function class


【解决方案1】:

最佳做法最好由与您合作的团队确定。在我看来,您有两种选择之一:

您可以将您的函数前缀为“具有这些前缀的函数用于这些操作”。这类似于 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 对其进行处理。

【讨论】:

  • 我明白了,比如 include(header.php)。而是为实际的数据库相关的东西和进程使用类?
  • 这就是我通常所做的,KeenLearner。你的 PHP 正在做与逻辑相关的事情,而不仅仅是返回 HTML。
【解决方案2】:

您的标题提到了“类”,所以我猜您有兴趣将 OOP(面向对象编程)概念与基于函数的“模板”进行比较。

如果没有对 OOP 有一些基本了解,比较两者可能不会那么容易。假设您有基础,基于对象的模板系统将有一个“视图”对象来处理模板的输出。会有一些方法用于分配变量,甚至分配模板本身。

<?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)。它应该允许包含子模板,或者通过将子模板的输出分配给主模板(就像它只是另一个模板变量一样),允许模板包含其他模板,或者使用某种主布局来包含不同的内容部分。

归根结底,大多数 OOP 模板实现将“包含”公共部分,这可能与您现在使用的方法相似。但是,主要区别在于 OOP 技术将(或应该?)倾向于使您远离将表示层(HTML)与所有其余代码混合在一起。

但是有许多不同的 OOP 模板引擎 - 看看其中的一些,看看它们提供了什么。您可能还想看看 mVC(模型-视图-控制器)设计模式。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多