我最近开始使用PHP构建网页,并且缺乏经验,我对编码约定有疑问。 使用require来动态加载网页中的页面内容或页面元素是否被认为是不好的风格?
例如,如果您正在模块化您的代码,并且/ resources / pageContent /文件夹包含不同的文件,其中包含不同页面的内容。说require ("resources/pageContent/profile.php")
会被认为是不好的风格吗?
我看到这样做的另一种方法是使用fopen()
,但当然,它不允许你在动态加载的页面中使用任何PHP代码,只会打印HTML和CSS。
我只是想把东西放到模块中,因为把东西放在函数中(例如,loadPageProfile)可能会变得非常混乱。
答案 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);
}
}
}
现在假设您有以下网页:contact
,index
,profile
,login
,register
所以不要在任何地方使用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)
不,这不是不错的风格,实际上是很好的做法。继续使用它。