Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是php5类方法?_Php_Function_Class - Fatal编程技术网

什么是php5类方法?

什么是php5类方法?,php,function,class,Php,Function,Class,我正在以一种旧的方式编程——仍然使用函数而不是类。例如,我在为站点创建基本模板时所做的一些基本工作是将页眉和页脚放在一个函数中,类似这样的函数放在一个名为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/xht

我正在以一种旧的方式编程——仍然使用函数而不是类。例如,我在为站点创建基本模板时所做的一些基本工作是将页眉和页脚放在一个函数中,类似这样的函数放在一个名为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();

?>

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


最佳实践是什么?

最佳实践可以由您所在的团队来确定。在我看来,你有两个选择之一:

您可以将函数的前缀设置为“带有这些前缀的函数用于这些操作”。这类似于PHP已经做了一段时间的工作,即db_connect()和db_query()。但实际上,这与您已经拥有的非常相似(outline\u start()和outline\u 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感兴趣的话,这会使以后的CSS、样式和JS变得容易。因此,如果您的PHP函数的目的是真正返回静态HTML,只需将其粘贴到另一个文件中,而不必担心尝试PHP5。最佳实践可以由您的团队来确定。在我看来,你有两个选择之一:

您可以将函数的前缀设置为“带有这些前缀的函数用于这些操作”。这类似于PHP已经做了一段时间的工作,即db_connect()和db_query()。但实际上,这与您已经拥有的非常相似(outline\u start()和outline\u 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感兴趣的话,这会使以后的CSS、样式和JS变得容易。因此,如果PHP函数的目的是真正返回静态HTML,只需将其粘贴到另一个文件中,不必担心尝试将其PHP5。你的标题提到了“类”,所以我猜你有兴趣将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();
?> 

现在,模板本身可能使用某种特殊的模板语言(如),或者可能只使用本机PHP(如)。它应该允许包含子模板,或者通过将子模板的输出分配给主模板(就像它只是另一个模板变量),允许模板包含其他模板,或者使用某种主布局来包含不同的内容部分

归根结底,大多数OOP模板实现将“包括”公共部分,这可能与您现在使用的方法类似。然而,主要的区别是OOP技术将(或者应该?)使您不再将表示层(HTML)与所有其他代码混合在一起


但是有很多不同的OOP模板引擎——看看其中的一些,看看它们提供了什么。您可能还想看看mVC(Model-View-Controller)设计模式。

您的标题提到了“类”,所以我猜您有兴趣将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();
?> 

现在,模板本身可能使用某种特殊的模板语言(如),或者可能只使用本机PHP(如)。它应该允许包含子模板,或者通过将子模板的输出分配给主模板(就像它只是另一个模板变量),允许模板包含其他模板,或者使用某种主布局来包含不同的内容部分

归根结底,大多数OOP模板实现将“包括”公共部分,这可能与您现在使用的方法类似。然而,主要的区别是OOP技术将(或者应该?)使您不再将表示层(HTML)与所有其他代码混合在一起


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

了解oop。你的生活会感谢你的。学习oop。你的生活会感谢你的。我明白了,比如include(header.php)。而是将类用于实际的db相关的东西和过程?这是我通常做的,KeenLearner。您的PHP正在做与逻辑相关的事情,而不是只返回HTML。我明白了,比如include(header.PHP)。而是将类用于实际的db相关的东西和过程?这是我通常做的,KeenLearner。您的PHP正在做与逻辑相关的事情,而不仅仅是返回HTML。