PHP编码风格和约定:使用require加载页面元素

时间:2012-11-11 09:45:24

标签: php coding-style conventions

我最近开始使用PHP构建网页,并且缺乏经验,我对编码约定有疑问。 使用require来动态加载网页中的页面内容或页面元素是否被认为是不好的风格?

例如,如果您正在模块化您的代码,并且/ resources / pageContent /文件夹包含不同的文件,其中包含不同页面的内容。说require ("resources/pageContent/profile.php")会被认为是不好的风格吗? 我看到这样做的另一种方法是使用fopen(),但当然,它不允许你在动态加载的页面中使用任何PHP代码,只会打印HTML和CSS。

我只是想把东西放到模块中,因为把东西放在函数中(例如,loadPageProfile)可能会变得非常混乱。

2 个答案:

答案 0 :(得分:2)

首先, 如果要编写干净且可维护的代码,请不要使用错误抑制器@ 倾听所有错误 - 大小错误。这对你很有帮助。真。

error_reporting(E_ALL);

完成后,只需更改

即可
error_reporting(0);
  

我只是想把东西放进模块中,因为把东西放进去   函数(例如,loadPageProfile)可能会变得非常混乱。

那么,你正走在正确的轨道上...... 你要做的就是创建一个名为Page的模块。 (我们现在正在谈论页面)

使用程序代码来创建模块是不好的做法,因为我们正在谈论它们。

将所有逻辑封装到一个类中,如下所示:

档案Page.php

abstract class Page {

   /**
    * Includes chunk of the page
    * it's Useful, when you have number of pages
    * and want for example only one chunk to be displayed
    * everywhere
    * This could be footer or menu or something like this "static" parts
    * 
    * @param string $block
    * @return void
    */
   public static function useBlock($block)
   {  
      $file = 'path_to_blocks' . DIRECTORY_SEPARATOR . $block; 

      //Ensure this is valid stream before we include it;
      if ( is_file($file) ){
         // No need to use require() here
         // Because we are sure that file exists and valid for inclusion
         // include is a bit faster that require()
         include($file);
      }
   }

   /**
    * Displays some page
    * This is just simply form of require, but
    * this method would simplify inclusion 
    * 
    * @param string $page
    * @return void
    */
   public static function DisplayPage($page)
   {
     $file = 'path_to_your_pages' . DIRECTORY_SEPARATOR . $page;

     if ( is_file($file) ){
        include($file); 
     }
   }

}

现在假设您有以下网页:contactindexprofileloginregister所以不要在任何地方使用require()简单地称之为“舒适”的方法。

     

虽然页脚和菜单可能与此类似:

文件:footer.phtml

<div id="footer">Copyrigth (c) you and bla bla bla</div>

文件:menu.phtml

<li><a href="/">Home</li>
<li><a href="/register/">Register</a></li>
<li><a href="/contact/">Contact</li>

要求特定的课程,你可以创建一些module,就像这一样:

class Import {

   /**
    * 
    * @param string $class Class File name to be required
    * @param string $ext filename extension (just to simplify )
    * @return bool
    */
   public static function getSomeClass($class, $ext = '.php'){

      $location = 'folder_of_classes' . DIRECTORY_SEPARATOR . $class . $ext;
      return spl_autoload_register(function() use ($location){
         // We won't use include() here
         // Because we'd to stop (producing fatal error) if inclusion would fail
         require_once ($location);
      });
   }

}

然后,当您需要特定课程时,请致电

<?php
// requires MySQL_PDO.php located in defined foldet
Import::getSomeClass('MySQL_PDO');

请记住,当我们谈论模块时,在99%的情况下,我们会讨论在这个模块中实现它的类。

另一个建议是:

1)不要将CSS与HTML混合(创建单独的css文件并将其包含在特定页面上,通过<link href="path_to_css.css" rel="stylesheet" type="text/css" />

因为它可以使标记在将来清晰易用(例如,当您想要更改样式或添加内容时)

2)不要混用PHP和JavaScript代码。将JavaScript文件保存在单独的文件和CSS中。使用Ajax在PHP和JavaScript之间共享变量

3)不要将所有HTML,CSS,JavaScript与PHP混合使用。特别是HTML。将modules(类或业务逻辑)保存在单独的文件中。然后只包括特定任务所需的部分。

答案 1 :(得分:1)

不,这不是不错的风格,实际上是很好的做法。继续使用它。