|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
终于理解了数据库的概念,而且让你兴奋不已的是你终于可以通过PHP来连接数据库了,这期间你是怎么学会的,我们不去考证了,但是事实证明,你已经可以了。成绩 PHP以其易用性失掉敏捷的推行,但易用并非说就可以用好它,实践上很多法式员用它很轻易的立一个个WEB使用体系,但又有几何人细心的思索过他们的代码,是不是轻易保护、是不是足够强健、否效力足够高、是不是足够平安,当PHP用于创立大型网站时这些就成为很关头的要素。上面咱们从较稍微的成绩入手下手会商,直至一些致命的毛病。共分三局部。
第一局部、较稍微的毛病
1、Printf(),
该函数次要用来格局化显示数据。当你要改动某个数据的显示格局时才利用。例如以分歧的精度来显示PI(3.1415926)的值。
<?php
/*
* The three faces of Π
*/
printf ("Pi is: %.2fn<br>n", M_PI);
printf ("Pi is also: %.3fn<br>n", M_PI);
printf ("Pi is also: %.4fn<br>n", M_PI);
?>
但很多法式员仅仅为显示一些变量值和函数前往值利用该函数。由于Printf()在显示数据前要先格局化该数据以速度较慢,因而,仅为了显示数据时使用print和echo,以进步速度。
2、语意反省
PHP是一种弱类型言语,也就是说在利用一个变量前不必界说,如许给编程带来了很大的便利和天真,但你本人必需晓得该变量究竟应当是哪一种类型,由于该变量在运转时仍实践对应着某一品种型(各类类型之间可以自在相互转换),没有类型的变量是不存在的。有能够PHP其实不能反省出你的语意毛病,但因为变量类型的变更,会招致一些潜伏的成绩的产生。别的一个值得注重的成绩是变量的局限,它也能够会招致一些潜伏的成绩的产生。
在PHP中有以下几种根基变量:
Boolean, resource, integer, double, string, array and object。
3、一时变量的利用
一时变量的滥用会招致法式运转效力的下降。什么时候利用一时变量可基于以下两点思索:
1、该变量是不是最少利用两次。
2、该变量的利用是不是会明显进步法式的可读性。
假如一条也不知足,则省略该变量的利用。例如:
<?php
$tmp = date ("F d, h:i a"); /* ie January 3, 2:30 pm */
print $tmp;
?>
就应当改成:
<?php
print date ("F d, h:i a");
?>
又如:
<?php
// string reverse_characters(string str)
// Reverse all of the characters in a string.
function reverse_characters ($str)
{
return implode ("", array_reverse (preg_split("//", $str)));
}
?>
的可读性不强,可改成:
<?php
// string reverse_characters(string str)
// Reverse all of the characters in a string.
function reverse_characters ($str)
{
$characters = preg_split ("//", $str);
$characters = array_reverse ($characters);
return implode ("", $characters);
}
?>
4、客户端和办事器端代码的分别
客户端和办事器端代码的在PHP法式中实践上就是HTML代码和PHP言语代码,良多人把HTML和PHP语句夹杂在一个文件里,使得这文件很大,这类作风对法式的保护和再开辟很晦气,不合适大型站点的开辟。普通有两种办法把HTML和PHP语句分隔:
1、编写公用API,例如:
index.php ? The Client side
<?php include_once ("site.lib"); ?>
<html>
<head>
<title> <?php print_header (); ?> </title>
</head>
<body>
<h1> <?php print_header (); ?> </h1>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="25%">
<?php print_links (); ?>
</td>
<td>
<?php print_body (); ?>
</td>
</tr>
</table>
</body>
</html>
site.lib ? The server side code
<?php
$dbh = mysql_connect ("localhost", "sh", "pass") or die (sprintf ("Cannot connect to MySQL [%s]: %s", mysql_errno (), mysql_error ()));
@mysql_select_db ("MainSite") or die (sprintf ("Cannot select database [%s]: %s",mysql_errno (), mysql_error ()));
$sth = @mysql_query ("SELECT * FROM site", $dbh) or die (sprintf ("Cannot execute query [%s]: %s", mysql_errno (), mysql_error ()));
$site_info = mysql_fetch_object ($sth);
function print_header ()
{
global $site_info;
print $site_info->header;
}
function print_body ()
{
global $site_info;
print nl2br ($site_info->body);
}
function print_links ()
{
global $site_info;
$links = explode ("n", $site_info->links);
$names = explode ("n", $site_info->link_names);
for ($i = 0; $i < count ($links); $i++)
{
print "ttt <a href="$links[$i]">$names[$i]</a> n<br>n";
}
}
?>
这类办法使得法式看起来对照简约,并且履行速度也较快。
2、利用模板的办法
这类办法使得法式看起来更简约,一样完成下面的功效,可用以下代码:
<html>
<head>
<title>%%PAGE_TITLE%%</title>
</head>
<body %%BODY_PROPERTIES%%>
<h1>%%PAGE_TITLE%%</h1>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="25%">%%PAGE_LINKS%%</td>
<td>%%PAGE_CONTENT%%</td>
</tr>
</table>
</body>
</html>
用占位符取代要静态生成的内容,然后用一解析法式剖析该模板文件,把占位符用际的内容交换。种办法使得即便不会利用PHP的页面制造人员也能修正模板文件。这类办法的弱点是履行效力不高,由于要注释模板文件。同时完成起来也对照庞杂。
注: www.thewebmasters.net的 FastTemplate class可便利的完成以上功效。
5、不要用过时的函数
作为一种自在软件,PHP开展很快,个中的良多函数都已过时,例如:
while (1):
print "5";
if ($idx++ == 5):
break;
endif;
endwhile;
固然还能用但效力一定不高,并且能够在今后的版本中会禁用,招致法式不克不及运转。因而要常常对比最新PHP手册反省那些函数已过时实时修改。 我的这套线路可能跟许多学习PHP的爱好者不谋而合,这也算是一个循序渐进的学习过程,不过新手不要看到上面的概括就以为学习蛮简单的,默默在此不得不对您稍微泼一下冷水,任何东西其实都不简单。 |
|